1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

For #913, coroutine support complex error.

This commit is contained in:
winlin 2017-06-11 18:44:20 +08:00
parent 9ae54850bf
commit 9db2a04c3b
38 changed files with 620 additions and 414 deletions

View file

@ -394,8 +394,10 @@ srs_error_t SrsSignalManager::initialize()
return srs_success;
}
int SrsSignalManager::start()
srs_error_t SrsSignalManager::start()
{
srs_error_t err = srs_success;
/**
* Note that if multiple processes are used (see below),
* the signal pipe should be initialized after the fork(2) call
@ -427,14 +429,22 @@ int SrsSignalManager::start()
srs_trace("signal installed, reload=%d, reopen=%d, grace_quit=%d",
SRS_SIGNAL_RELOAD, SRS_SIGNAL_REOPEN_LOG, SRS_SIGNAL_GRACEFULLY_QUIT);
return trd->start();
if ((err = trd->start()) != srs_success) {
return srs_error_wrap(err, "signal manager");
}
return err;
}
int SrsSignalManager::cycle()
srs_error_t SrsSignalManager::cycle()
{
int ret = ERROR_SUCCESS;
srs_error_t err = srs_success;
while (!trd->pull()) {
while (true) {
if ((err = trd->pull()) != srs_success) {
return srs_error_wrap(err, "signal manager");
}
int signo;
/* Read the next signal from the pipe */
@ -444,7 +454,7 @@ int SrsSignalManager::cycle()
server->on_signal(signo);
}
return ret;
return err;
}
void SrsSignalManager::sig_catcher(int signo)
@ -692,7 +702,6 @@ srs_error_t SrsServer::acquire_pid_file()
srs_error_t SrsServer::listen()
{
int ret = ERROR_SUCCESS;
srs_error_t err = srs_success;
if ((err = listen_rtmp()) != srs_success) {
@ -711,8 +720,8 @@ srs_error_t SrsServer::listen()
return srs_error_wrap(err, "stream caster listen");
}
if ((ret = conn_manager->start()) != ERROR_SUCCESS) {
return srs_error_new(ret, "connection manager");
if ((err = conn_manager->start()) != srs_success) {
return srs_error_wrap(err, "connection manager");
}
return err;
@ -720,12 +729,13 @@ srs_error_t SrsServer::listen()
srs_error_t SrsServer::register_signal()
{
// start signal process thread.
int ret = signal_manager->start();
if (ret != ERROR_SUCCESS) {
return srs_error_new(ret, "signal manager start");
srs_error_t err = srs_success;
if ((err = signal_manager->start()) != srs_success) {
return srs_error_wrap(err, "signal manager start");
}
return srs_success;
return err;
}
srs_error_t SrsServer::http_handle()
@ -808,15 +818,15 @@ srs_error_t SrsServer::http_handle()
srs_error_t SrsServer::ingest()
{
int ret = ERROR_SUCCESS;
srs_error_t err = srs_success;
#ifdef SRS_AUTO_INGEST
if ((ret = ingester->start()) != ERROR_SUCCESS) {
return srs_error_new(ret, "ingest start");
if ((err = ingester->start()) != srs_success) {
return srs_error_wrap(err, "ingest start");
}
#endif
return srs_success;
return err;
}
srs_error_t SrsServer::cycle()
@ -1191,6 +1201,7 @@ void SrsServer::resample_kbps()
int SrsServer::accept_client(SrsListenerType type, srs_netfd_t stfd)
{
int ret = ERROR_SUCCESS;
srs_error_t err = srs_success;
SrsConnection* conn = fd2conn(type, stfd);
if (conn == NULL) {
@ -1205,7 +1216,11 @@ int SrsServer::accept_client(SrsListenerType type, srs_netfd_t stfd)
// cycle will start process thread and when finished remove the client.
// @remark never use the conn, for it maybe destroyed.
if ((ret = conn->start()) != ERROR_SUCCESS) {
if ((err = conn->start()) != srs_success) {
// TODO: FIXME: Use error
ret = srs_error_code(err);
srs_freep(err);
return ret;
}
srs_verbose("accept client finished. conns=%d, ret=%d", (int)conns.size(), ret);