summaryrefslogtreecommitdiff
path: root/util/message_server_port.cpp
diff options
context:
space:
mode:
authorEliot Horowitz <eliot@10gen.com>2010-07-28 00:40:01 -0400
committerEliot Horowitz <eliot@10gen.com>2010-07-28 00:40:01 -0400
commitb1737a41989cf8b7280cfe66674a51c0ac0575ac (patch)
treeb28929cb5a508fc245ef34f01274aa1f3671338a /util/message_server_port.cpp
parent3b3edcdb86d5d57a4d2672e51dca5372081f23b7 (diff)
downloadmongo-b1737a41989cf8b7280cfe66674a51c0ac0575ac.tar.gz
use boost::bind instead of grab
Diffstat (limited to 'util/message_server_port.cpp')
-rw-r--r--util/message_server_port.cpp26
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);
}
}