You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by ro...@apache.org on 2011/08/03 01:37:37 UTC

svn commit: r1153307 - in /thrift/trunk/lib/cpp/src/server: TNonblockingServer.cpp TNonblockingServer.h

Author: roger
Date: Tue Aug  2 23:37:36 2011
New Revision: 1153307

URL: http://svn.apache.org/viewvc?rev=1153307&view=rev
Log:
THRIFT-1184 event_base memory freeing by class TNonblockingServer
adds option to use existing event base
Patch: Pavlin Radoslavov

Modified:
    thrift/trunk/lib/cpp/src/server/TNonblockingServer.cpp
    thrift/trunk/lib/cpp/src/server/TNonblockingServer.h

Modified: thrift/trunk/lib/cpp/src/server/TNonblockingServer.cpp
URL: http://svn.apache.org/viewvc/thrift/trunk/lib/cpp/src/server/TNonblockingServer.cpp?rev=1153307&r1=1153306&r2=1153307&view=diff
==============================================================================
--- thrift/trunk/lib/cpp/src/server/TNonblockingServer.cpp (original)
+++ thrift/trunk/lib/cpp/src/server/TNonblockingServer.cpp Tue Aug  2 23:37:36 2011
@@ -567,7 +567,7 @@ TNonblockingServer::~TNonblockingServer(
     delete connection;
   }
 
-  if (eventBase_) {
+  if (eventBase_ && ownEventBase_) {
     event_base_free(eventBase_);
   }
 
@@ -802,10 +802,11 @@ void TNonblockingServer::createNotificat
 /**
  * Register the core libevent events onto the proper base.
  */
-void TNonblockingServer::registerEvents(event_base* base) {
+void TNonblockingServer::registerEvents(event_base* base, bool ownEventBase) {
   assert(serverSocket_ != -1);
   assert(!eventBase_);
   eventBase_ = base;
+  ownEventBase_ = ownEventBase;
 
   // Print some libevent stats
   GlobalOutput.printf("libevent %s method %s",
@@ -911,7 +912,7 @@ void TNonblockingServer::serve() {
   }
 
   // Initialize libevent core
-  registerEvents(static_cast<event_base*>(event_init()));
+  registerEvents(static_cast<event_base*>(event_init()), true);
 
   // Run the preServe event
   if (eventHandler_ != NULL) {

Modified: thrift/trunk/lib/cpp/src/server/TNonblockingServer.h
URL: http://svn.apache.org/viewvc/thrift/trunk/lib/cpp/src/server/TNonblockingServer.h?rev=1153307&r1=1153306&r2=1153307&view=diff
==============================================================================
--- thrift/trunk/lib/cpp/src/server/TNonblockingServer.h (original)
+++ thrift/trunk/lib/cpp/src/server/TNonblockingServer.h Tue Aug  2 23:37:36 2011
@@ -132,6 +132,7 @@ class TNonblockingServer : public TServe
 
   /// The event base for libevent
   event_base* eventBase_;
+  bool ownEventBase_;
 
   /// Event struct, used with eventBase_ for connection events
   struct event serverEvent_;
@@ -234,6 +235,7 @@ class TNonblockingServer : public TServe
     port_(port),
     threadPoolProcessing_(false),
     eventBase_(NULL),
+    ownEventBase_(false),
     numTConnections_(0),
     numActiveProcessors_(0),
     connectionStackLimit_(CONNECTION_STACK_LIMIT),
@@ -259,6 +261,7 @@ class TNonblockingServer : public TServe
     port_(port),
     threadManager_(threadManager),
     eventBase_(NULL),
+    ownEventBase_(false),
     numTConnections_(0),
     numActiveProcessors_(0),
     connectionStackLimit_(CONNECTION_STACK_LIMIT),
@@ -293,6 +296,7 @@ class TNonblockingServer : public TServe
     port_(port),
     threadManager_(threadManager),
     eventBase_(NULL),
+    ownEventBase_(false),
     numTConnections_(0),
     numActiveProcessors_(0),
     connectionStackLimit_(CONNECTION_STACK_LIMIT),
@@ -704,8 +708,10 @@ class TNonblockingServer : public TServe
    * Register the core libevent events onto the proper base.
    *
    * @param base pointer to the event base to be initialized.
+   * @param ownEventBase if true, this server is responsible for
+   * freeing the event base memory.
    */
-  void registerEvents(event_base* base);
+  void registerEvents(event_base* base, bool ownEventBase = true);
 
   /**
    * Main workhorse function, starts up the server listening on a port and