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

Squash: Support RPM. Fix bugs.

This commit is contained in:
winlin 2021-11-04 07:37:17 +08:00
parent a01354a595
commit 523b055c06
22 changed files with 397 additions and 23 deletions

View file

@ -175,6 +175,12 @@ srs_error_t SrsForwarder::cycle()
srs_freep(err);
}
// Never wait if thread error, fast quit.
// @see https://github.com/ossrs/srs/pull/2284
if ((err = trd->pull()) != srs_success) {
return srs_error_wrap(err, "forwarder");
}
srs_usleep(SRS_FORWARDER_CIMS);
}

View file

@ -237,10 +237,8 @@ srs_error_t SrsGoApiRtcPlay::check_remote_sdp(const SrsSdp& remote_sdp)
return srs_error_new(ERROR_RTC_SDP_EXCHANGE, "now only suppor rtcp-mux");
}
for (std::vector<SrsMediaPayloadType>::const_iterator iter_media = iter->payload_types_.begin(); iter_media != iter->payload_types_.end(); ++iter_media) {
if (iter->sendonly_) {
return srs_error_new(ERROR_RTC_SDP_EXCHANGE, "play API only support sendrecv/recvonly");
}
if (iter->sendonly_) {
return srs_error_new(ERROR_RTC_SDP_EXCHANGE, "play API only support sendrecv/recvonly");
}
}
@ -489,10 +487,8 @@ srs_error_t SrsGoApiRtcPublish::check_remote_sdp(const SrsSdp& remote_sdp)
return srs_error_new(ERROR_RTC_SDP_EXCHANGE, "now only suppor rtcp-mux");
}
for (std::vector<SrsMediaPayloadType>::const_iterator iter_media = iter->payload_types_.begin(); iter_media != iter->payload_types_.end(); ++iter_media) {
if (iter->recvonly_) {
return srs_error_new(ERROR_RTC_SDP_EXCHANGE, "publish API only support sendrecv/sendonly");
}
if (iter->recvonly_) {
return srs_error_new(ERROR_RTC_SDP_EXCHANGE, "publish API only support sendrecv/sendonly");
}
}

View file

@ -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) {

View file

@ -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>

View file

@ -9,6 +9,6 @@
#define VERSION_MAJOR 4
#define VERSION_MINOR 0
#define VERSION_REVISION 187
#define VERSION_REVISION 192
#endif

View file

@ -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;
}
}

View file

@ -229,7 +229,7 @@ void srt_server::srt_handle_connection(SRT_SOCKSTATUS status, SRTSOCKET input_fd
} else if (srt_conn_ptr->get_mode() == PUSH_SRT_MODE) {
conn_event = SRT_EPOLL_IN | SRT_EPOLL_ERR;
} else {
srt_log_trace("stream mode error, it shoulde be m=push or m=pull, streamid:%s",
srt_log_trace("stream mode error, it should be m=push or m=pull, streamid:%s",
srt_conn_ptr->get_streamid().c_str());
srt_conn_ptr->close();
return;

View file

@ -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>

View file

@ -24,6 +24,7 @@ using namespace std;
#include <srs_service_conn.hpp>
#include <sys/socket.h>
#include <netdb.h>
#include <st.h>
MockSrsConnection::MockSrsConnection()
{
@ -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);
}