Skip to content

Commit

Permalink
Threads-Hybrid: Use ST wait and IO for RECV/SEND thread.
Browse files Browse the repository at this point in the history
  • Loading branch information
winlinvip committed Apr 26, 2021
1 parent c8f2ff0 commit 5074a4d
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 23 deletions.
11 changes: 4 additions & 7 deletions trunk/src/app/srs_app_listener.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -331,10 +331,8 @@ int SrsUdpMuxSocket::recvfrom(srs_utime_t timeout)

int SrsUdpMuxSocket::raw_recvfrom()
{
int osfd = srs_netfd_fileno(lfd);

fromlen = sizeof(from);
nread = ::recvfrom(osfd, buf, nb_buf, 0, (sockaddr*)&from, (socklen_t*)&fromlen);
nread = srs_recvfrom(lfd, buf, nb_buf, (sockaddr*)&from, &fromlen, SRS_UTIME_NO_TIMEOUT);
if (nread <= 0) {
return nread;
}
Expand Down Expand Up @@ -389,8 +387,8 @@ srs_error_t SrsUdpMuxSocket::sendto(void* data, int size, srs_utime_t timeout)
if (nb_write <= 0) {
if (nb_write < 0 && errno == ETIME) {
return srs_error_new(ERROR_SOCKET_TIMEOUT, "sendto timeout %d ms", srsu2msi(timeout));
}
}

return srs_error_new(ERROR_SOCKET_WRITE, "sendto");
}

Expand All @@ -406,8 +404,7 @@ srs_error_t SrsUdpMuxSocket::sendto(void* data, int size, srs_utime_t timeout)

int SrsUdpMuxSocket::raw_sendto(void* data, int size)
{
int osfd = srs_netfd_fileno(lfd);
return ::sendto(osfd, data, size, 0, (sockaddr*)&from, (socklen_t)fromlen);
return srs_sendto(lfd, data, size, (sockaddr*)&from, fromlen, SRS_UTIME_NO_TIMEOUT);
}

srs_netfd_t SrsUdpMuxSocket::stfd()
Expand Down
20 changes: 4 additions & 16 deletions trunk/src/app/srs_app_threads.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1903,9 +1903,6 @@ srs_error_t SrsAsyncRecvManager::do_start()
{
srs_error_t err = srs_success;

// TODO: FIXME: Config it?
srs_utime_t interval = 10 * SRS_UTIME_MILLISECONDS;

// We must deep copy listeners if changed.
vector<SrsThreadUdpListener*> listeners;

Expand Down Expand Up @@ -1956,11 +1953,8 @@ srs_error_t SrsAsyncRecvManager::do_start()
continue;
}

// TODO: FIXME: Maybe we should use cond wait?
timespec tv = {0};
tv.tv_sec = interval / SRS_UTIME_SECONDS;
tv.tv_nsec = (interval % SRS_UTIME_SECONDS) * 1000;
nanosleep(&tv, NULL);
// OK to use ST wait.
srs_usleep(10 * SRS_UTIME_MILLISECONDS);
}

return err;
Expand Down Expand Up @@ -2100,9 +2094,6 @@ srs_error_t SrsAsyncSendManager::do_start()
{
srs_error_t err = srs_success;

// TODO: FIXME: Config it?
srs_utime_t interval = 10 * SRS_UTIME_MILLISECONDS;

while (true) {
vector<SrsAsyncUdpPacket*> flying_sending_packets;
sending_packets_->swap(flying_sending_packets);
Expand All @@ -2123,11 +2114,8 @@ srs_error_t SrsAsyncSendManager::do_start()
continue;
}

// TODO: FIXME: Maybe we should use cond wait?
timespec tv = {0};
tv.tv_sec = interval / SRS_UTIME_SECONDS;
tv.tv_nsec = (interval % SRS_UTIME_SECONDS) * 1000;
nanosleep(&tv, NULL);
// OK to use ST wait.
srs_usleep(10 * SRS_UTIME_MILLISECONDS);
}

return err;
Expand Down

0 comments on commit 5074a4d

Please sign in to comment.