winlin

fix the thread stop bug, must wait when not joinable.

... ... @@ -539,8 +539,6 @@ void SrsServer::destroy()
}
srs_freep(signal_manager);
srs_freep(handler);
}
void SrsServer::dispose()
... ...
... ... @@ -293,10 +293,14 @@ private:
virtual void dispose();
// server startup workflow, @see run_master()
public:
/**
* initialize server with callback handler.
* @remark user must free the cycle handler.
*/
virtual int initialize(ISrsServerCycle* cycle_handler);
virtual int initialize_st();
virtual int initialize_signal();
virtual int acquire_pid_file();
virtual int initialize_st();
virtual int listen();
virtual int register_signal();
virtual int http_handle();
... ...
... ... @@ -129,11 +129,13 @@ namespace internal {
if (ret) {
srs_warn("core: ignore join thread failed.");
}
}
// wait the thread actually terminated.
// sometimes the thread join return -1, for example,
// when thread use st_recvfrom, the thread join return -1.
// so here, we use a variable to ensure the thread stopped.
// @remark even the thread not joinable, we must ensure the thread stopped when stop.
while (!really_terminated) {
st_usleep(10 * 1000);
... ... @@ -142,7 +144,6 @@ namespace internal {
}
srs_warn("core: wait thread to actually terminated");
}
}
tid = NULL;
}
... ...