diff options
author | Eliot Horowitz <eliot@10gen.com> | 2010-07-28 00:40:01 -0400 |
---|---|---|
committer | Eliot Horowitz <eliot@10gen.com> | 2010-07-28 00:40:01 -0400 |
commit | b1737a41989cf8b7280cfe66674a51c0ac0575ac (patch) | |
tree | b28929cb5a508fc245ef34f01274aa1f3671338a /util/message_server_port.cpp | |
parent | 3b3edcdb86d5d57a4d2672e51dca5372081f23b7 (diff) | |
download | mongo-b1737a41989cf8b7280cfe66674a51c0ac0575ac.tar.gz |
use boost::bind instead of grab
Diffstat (limited to 'util/message_server_port.cpp')
-rw-r--r-- | util/message_server_port.cpp | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/util/message_server_port.cpp b/util/message_server_port.cpp index 137b4d8680a..f8cb5325a0f 100644 --- a/util/message_server_port.cpp +++ b/util/message_server_port.cpp @@ -28,16 +28,15 @@ namespace mongo { namespace pms { - MessagingPort * grab = 0; MessageHandler * handler; - void threadRun(){ + void threadRun( MessagingPort * inPort){ + assert( inPort ); + setThreadName( "conn" ); TicketHolderReleaser connTicketReleaser( &connTicketHolder ); - - assert( grab ); - auto_ptr<MessagingPort> p( grab ); - grab = 0; + + auto_ptr<MessagingPort> p( inPort ); string otherSide; @@ -83,30 +82,27 @@ namespace mongo { } virtual void accepted(MessagingPort * p) { - assert( ! pms::grab ); - pms::grab = p; if ( ! connTicketHolder.tryAcquire() ){ log() << "connection refused because too many open connections" << endl; // TODO: would be nice if we notified them... p->shutdown(); - - pms::grab = 0; + delete p; + sleepmillis(2); // otherwise we'll hard loop return; } try { - boost::thread thr( pms::threadRun ); - while ( pms::grab ){ - sleepmillis(1); - } + boost::thread thr( boost::bind( &pms::threadRun , p ) ); } catch ( boost::thread_resource_error& ){ log() << "can't create new thread, closing connection" << endl; + p->shutdown(); - pms::grab = 0; + delete p; + sleepmillis(2); } } |