Skip to content

Commit

Permalink
For #2369, #1708, #1941: Check errno when close fd or stop thread
Browse files Browse the repository at this point in the history
  • Loading branch information
winlinvip committed Oct 31, 2021
1 parent 60ab81a commit ab50799
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 4 deletions.
11 changes: 10 additions & 1 deletion trunk/src/app/srs_app_st.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,16 @@ void SrsFastCoroutine::stop()
if (trd) {
void* res = NULL;
int r0 = st_thread_join((st_thread_t)trd, &res);
srs_assert(!r0);
if (r0) {
// By st_thread_join
if (errno == EINVAL) srs_assert(!r0);
if (errno == EDEADLK) srs_assert(!r0);
// By st_cond_timedwait
if (errno == EINTR) srs_assert(!r0);
if (errno == ETIME) srs_assert(!r0);
// Others
srs_assert(!r0);
}

srs_error_t err_res = (srs_error_t)res;
if (err_res != srs_success) {
Expand Down
2 changes: 2 additions & 0 deletions trunk/src/core/srs_core.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,9 @@
#endif

#include <assert.h>
#ifndef srs_assert
#define srs_assert(expression) assert(expression)
#endif

#include <stddef.h>
#include <sys/types.h>
Expand Down
13 changes: 11 additions & 2 deletions trunk/src/protocol/srs_service_st.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,17 @@ void srs_close_stfd(srs_netfd_t& stfd)
{
if (stfd) {
// we must ensure the close is ok.
int err = st_netfd_close((st_netfd_t)stfd);
srs_assert(err != -1);
int r0 = st_netfd_close((st_netfd_t)stfd);
if (r0) {
// By _st_epoll_fd_close or _st_kq_fd_close
if (errno == EBUSY) srs_assert(!r0);
// By close
if (errno == EBADF) srs_assert(!r0);
if (errno == EINTR) srs_assert(!r0);
if (errno == EIO) srs_assert(!r0);
// Others
srs_assert(!r0);
}
stfd = NULL;
}
}
Expand Down
2 changes: 1 addition & 1 deletion trunk/src/utest/srs_utest_reload.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
/*
#include <srs_utest_reload.hpp>
*/
#include <srs_core.hpp>
#include <srs_utest.hpp>

#include <srs_utest_config.hpp>
#include <srs_app_reload.hpp>
Expand Down
33 changes: 33 additions & 0 deletions trunk/src/utest/srs_utest_service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ using namespace std;
#include <srs_service_conn.hpp>
#include <sys/socket.h>
#include <netdb.h>
#include <st.h>

MockSrsConnection::MockSrsConnection()
{
Expand Down Expand Up @@ -1452,3 +1453,35 @@ VOID TEST(TCPServerTest, ContextUtility)
}
}

class MockStopSelfThread : public ISrsCoroutineHandler
{
public:
int r0;
int r1;
SrsFastCoroutine trd;
MockStopSelfThread() : trd("mock", this), r0(0), r1(0) {
}
virtual ~MockStopSelfThread() {
}
srs_error_t start() {
return trd.start();
}
void stop() {
trd.stop();
}
virtual srs_error_t cycle() {
r0 = st_thread_join((st_thread_t)trd.trd, NULL);
r1 = errno;
return srs_success;
}
};

VOID TEST(StopSelfThreadTest, ShouldFailWhenStopSelf)
{
MockStopSelfThread trd;
trd.start();
srs_usleep(0);
EXPECT_EQ(-1, trd.r0);
EXPECT_EQ(EDEADLK, trd.r1);
}

0 comments on commit ab50799

Please sign in to comment.