void BaseSession::HandleClose(){ LOG(WARNING) << "realy to close session... ..."; if (packet_transmitter_) packet_transmitter_->SetClose(); boost::mutex::scoped_lock close_mutex(close_socket_mutex_); if (state_ != STATE_ENABLE){ return; } if (socket_.is_open()){ socket_.close(); } state_ = STATE_DISABLE; }
static void test() { pid_t childpid; mutex mparent = create_mutex(MUTEX_NAME, true); if ((childpid = fork()) == -1) { sys_error_exit("fork"); } if (childpid == 0) { /* Child process */ mutex m = open_mutex(MUTEX_NAME); log("Child try lock mutex"); if (trylock_mutex(m)) // Should not succeed error_exit("Child trylock_mutex: mutex not locked by parent"); log("Child try to lock, 1 second timeout"); if (lock_withtimeout_mutex(m, 1)) error_exit("Child lock_withtimeout_mutex: mutex not locked by parent"); log("Child try to lock, 4 second timeout"); if (!lock_withtimeout_mutex(m, 4)) error_exit("Child lock_withtimeout_mutex: mutex locked by parent"); log("Child release lock"); unlock_mutex(m); close_mutex(m); exit(0); } else { /* Parent process */ log("Parent sleep 2 second with lock"); sleep(2); log("Parent unlock"); unlock_mutex(mparent); log("Parent sleep 2 seconds without lock"); sleep(2); log("Parent wait for lock"); lock_mutex(mparent); log("Parent got lock"); destroy_mutex(MUTEX_NAME, mparent); } }
void close_malloc_mutex() { # ifdef SAFE close_mutex(&malloc_mutex); # endif }