Skip to content

Commit

Permalink
feat: add in conditional compile for syscalls
Browse files Browse the repository at this point in the history
qt sys calls handle blocking sys calls whenever qthreads are
available to us keeping the thread unblocked
Signed-off-by: Lakshya Singh <lakshay.singh1108@gmail.com>
  • Loading branch information
king-11 committed Jul 1, 2021
1 parent 9d3dd0a commit a8e2ab1
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions runtime/src/qio/sys.c
Expand Up @@ -92,6 +92,11 @@

#endif

// to use qthread sys calls when available
#ifdef QTHREAD_VERSION
#include <qthread/qt_syscalls.h>
#endif



// Should be available in sys_xsi_strerror_r.c
Expand Down Expand Up @@ -1372,7 +1377,12 @@ err_t sys_accept(fd_t sockfd, sys_sockaddr_t* addr_out, fd_t* fd_out)

STARTING_SLOW_SYSCALL;

#ifdef QTHREAD_VERSION
got = qt_accept(sockfd, (struct sockaddr*) & addr_out->addr, &addr_len);
#else
got = accept(sockfd, (struct sockaddr*) & addr_out->addr, &addr_len);
#endif

if( got != -1 ) {
if( addr_len > (socklen_t) sizeof(sys_sockaddr_storage_t) ) {
fprintf(stderr, "Warning: address truncated in sys_accept\n");
Expand Down Expand Up @@ -1416,7 +1426,12 @@ err_t sys_connect(fd_t sockfd, const sys_sockaddr_t* addr)

STARTING_SLOW_SYSCALL;

#ifdef QTHREAD_VERSION
got = qt_connect(sockfd, (const struct sockaddr*) & addr->addr, addr->len);
#else
got = connect(sockfd, (const struct sockaddr*) & addr->addr, addr->len);
#endif

if( got != -1 ) {
err_out = 0;
} else {
Expand Down Expand Up @@ -1810,6 +1825,11 @@ err_t sys_select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds,

int got_nset;
err_t err_out = 0;

#ifdef QTHREAD_VERSION
got_nset = qt_select(nfds, readfds, writefds, exceptfds, timeout);
if (got_nset == -1) err_out = errno; // save error
#else
struct timeval deadline;
struct timeval now;
struct timeval real_timeout;
Expand Down Expand Up @@ -1845,6 +1865,7 @@ err_t sys_select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds,
(now.tv_sec == deadline.tv_sec && now.tv_usec > deadline.tv_usec))
break;
}
#endif

*nset = got_nset;
return err_out;
Expand Down

0 comments on commit a8e2ab1

Please sign in to comment.