summaryrefslogtreecommitdiffstats
path: root/lib/libthr/thread/thr_syscalls.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libthr/thread/thr_syscalls.c')
-rw-r--r--lib/libthr/thread/thr_syscalls.c129
1 files changed, 57 insertions, 72 deletions
diff --git a/lib/libthr/thread/thr_syscalls.c b/lib/libthr/thread/thr_syscalls.c
index 73fa56f..2327d74 100644
--- a/lib/libthr/thread/thr_syscalls.c
+++ b/lib/libthr/thread/thr_syscalls.c
@@ -169,9 +169,9 @@ __accept(int s, struct sockaddr *addr, socklen_t *addrlen)
int ret;
curthread = _get_curthread();
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __sys_accept(s, addr, addrlen);
- _thr_cancel_leave_defer(curthread, ret == -1);
+ _thr_cancel_leave(curthread, ret == -1);
return (ret);
}
@@ -187,7 +187,7 @@ __aio_suspend(const struct aiocb * const iocbs[], int niocb, const struct
_thr_cancel_enter(curthread);
ret = __sys_aio_suspend(iocbs, niocb, timeout);
- _thr_cancel_leave(curthread);
+ _thr_cancel_leave(curthread, 1);
return (ret);
}
@@ -207,9 +207,9 @@ __close(int fd)
struct pthread *curthread = _get_curthread();
int ret;
- _thr_cancel_enter_defer(curthread, 0);
+ _thr_cancel_enter2(curthread, 0);
ret = __sys_close(fd);
- _thr_cancel_leave_defer(curthread, 1);
+ _thr_cancel_leave(curthread, 1);
return (ret);
}
@@ -226,9 +226,9 @@ __connect(int fd, const struct sockaddr *name, socklen_t namelen)
struct pthread *curthread = _get_curthread();
int ret;
- _thr_cancel_enter_defer(curthread, 0);
+ _thr_cancel_enter(curthread);
ret = __sys_connect(fd, name, namelen);
- _thr_cancel_leave_defer(curthread, ret == -1);
+ _thr_cancel_leave(curthread, ret == -1);
return (ret);
}
@@ -245,9 +245,9 @@ ___creat(const char *path, mode_t mode)
struct pthread *curthread = _get_curthread();
int ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __creat(path, mode);
- _thr_cancel_leave_defer(curthread, ret == -1);
+ _thr_cancel_leave(curthread, ret == -1);
return ret;
}
@@ -269,30 +269,15 @@ __fcntl(int fd, int cmd,...)
va_list ap;
va_start(ap, cmd);
- switch (cmd) {
- case F_DUPFD:
- case F_DUP2FD:
- ret = __sys_fcntl(fd, cmd, va_arg(ap, int));
- break;
- case F_SETFD:
- case F_SETFL:
- ret = __sys_fcntl(fd, cmd, va_arg(ap, int));
- break;
- case F_GETFD:
- case F_GETFL:
- ret = __sys_fcntl(fd, cmd);
- break;
- case F_OSETLKW:
- case F_SETLKW:
- _thr_cancel_enter_defer(curthread, 1);
+ if (cmd == F_OSETLKW || cmd == F_SETLKW) {
+ _thr_cancel_enter(curthread);
#ifdef SYSCALL_COMPAT
ret = __fcntl_compat(fd, cmd, va_arg(ap, void *));
#else
ret = __sys_fcntl(fd, cmd, va_arg(ap, void *));
#endif
- _thr_cancel_leave_defer(curthread, ret == -1);
- break;
- default:
+ _thr_cancel_leave(curthread, ret == -1);
+ } else {
#ifdef SYSCALL_COMPAT
ret = __fcntl_compat(fd, cmd, va_arg(ap, void *));
#else
@@ -316,9 +301,9 @@ __fsync(int fd)
struct pthread *curthread = _get_curthread();
int ret;
- _thr_cancel_enter_defer(curthread, 0);
+ _thr_cancel_enter2(curthread, 0);
ret = __sys_fsync(fd);
- _thr_cancel_leave_defer(curthread, 1);
+ _thr_cancel_leave(curthread, 1);
return (ret);
}
@@ -335,9 +320,9 @@ __msync(void *addr, size_t len, int flags)
struct pthread *curthread = _get_curthread();
int ret;
- _thr_cancel_enter_defer(curthread, 0);
+ _thr_cancel_enter2(curthread, 0);
ret = __sys_msync(addr, len, flags);
- _thr_cancel_leave_defer(curthread, 1);
+ _thr_cancel_leave(curthread, 1);
return ret;
}
@@ -353,7 +338,7 @@ __nanosleep(const struct timespec *time_to_sleep,
_thr_cancel_enter(curthread);
ret = __sys_nanosleep(time_to_sleep, time_remaining);
- _thr_cancel_leave(curthread);
+ _thr_cancel_leave(curthread, 1);
return (ret);
}
@@ -380,9 +365,9 @@ __open(const char *path, int flags,...)
va_end(ap);
}
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __sys_open(path, flags, mode);
- _thr_cancel_leave_defer(curthread, ret == -1);
+ _thr_cancel_leave(curthread, ret == -1);
return ret;
}
@@ -410,9 +395,9 @@ __openat(int fd, const char *path, int flags, ...)
va_end(ap);
}
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __sys_openat(fd, path, flags, mode);
- _thr_cancel_leave_defer(curthread, ret == -1);
+ _thr_cancel_leave(curthread, ret == -1);
return ret;
}
@@ -430,9 +415,9 @@ __poll(struct pollfd *fds, unsigned int nfds, int timeout)
struct pthread *curthread = _get_curthread();
int ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __sys_poll(fds, nfds, timeout);
- _thr_cancel_leave_defer(curthread, ret == -1);
+ _thr_cancel_leave(curthread, ret == -1);
return ret;
}
@@ -451,9 +436,9 @@ ___pselect(int count, fd_set *rfds, fd_set *wfds, fd_set *efds,
struct pthread *curthread = _get_curthread();
int ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __sys_pselect(count, rfds, wfds, efds, timo, mask);
- _thr_cancel_leave_defer(curthread, ret == -1);
+ _thr_cancel_leave(curthread, ret == -1);
return (ret);
}
@@ -471,9 +456,9 @@ __read(int fd, void *buf, size_t nbytes)
struct pthread *curthread = _get_curthread();
ssize_t ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __sys_read(fd, buf, nbytes);
- _thr_cancel_leave_defer(curthread, ret == -1);
+ _thr_cancel_leave(curthread, ret == -1);
return ret;
}
@@ -491,9 +476,9 @@ __readv(int fd, const struct iovec *iov, int iovcnt)
struct pthread *curthread = _get_curthread();
ssize_t ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __sys_readv(fd, iov, iovcnt);
- _thr_cancel_leave_defer(curthread, ret == -1);
+ _thr_cancel_leave(curthread, ret == -1);
return ret;
}
@@ -511,9 +496,9 @@ __recvfrom(int s, void *b, size_t l, int f, struct sockaddr *from,
struct pthread *curthread = _get_curthread();
ssize_t ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __sys_recvfrom(s, b, l, f, from, fl);
- _thr_cancel_leave_defer(curthread, ret == -1);
+ _thr_cancel_leave(curthread, ret == -1);
return (ret);
}
@@ -530,9 +515,9 @@ __recvmsg(int s, struct msghdr *m, int f)
struct pthread *curthread = _get_curthread();
ssize_t ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __sys_recvmsg(s, m, f);
- _thr_cancel_leave_defer(curthread, ret == -1);
+ _thr_cancel_leave(curthread, ret == -1);
return (ret);
}
@@ -550,9 +535,9 @@ __select(int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
struct pthread *curthread = _get_curthread();
int ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __sys_select(numfds, readfds, writefds, exceptfds, timeout);
- _thr_cancel_leave_defer(curthread, ret == -1);
+ _thr_cancel_leave(curthread, ret == -1);
return ret;
}
@@ -569,9 +554,9 @@ __sendmsg(int s, const struct msghdr *m, int f)
struct pthread *curthread = _get_curthread();
ssize_t ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __sys_sendmsg(s, m, f);
- _thr_cancel_leave_defer(curthread, ret <= 0);
+ _thr_cancel_leave(curthread, ret <= 0);
return (ret);
}
@@ -589,9 +574,9 @@ __sendto(int s, const void *m, size_t l, int f, const struct sockaddr *t,
struct pthread *curthread = _get_curthread();
ssize_t ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __sys_sendto(s, m, l, f, t, tl);
- _thr_cancel_leave_defer(curthread, ret <= 0);
+ _thr_cancel_leave(curthread, ret <= 0);
return (ret);
}
@@ -605,7 +590,7 @@ ___sleep(unsigned int seconds)
_thr_cancel_enter(curthread);
ret = __sleep(seconds);
- _thr_cancel_leave(curthread);
+ _thr_cancel_leave(curthread, 1);
return (ret);
}
@@ -620,7 +605,7 @@ ___system(const char *string)
_thr_cancel_enter(curthread);
ret = __system(string);
- _thr_cancel_leave(curthread);
+ _thr_cancel_leave(curthread, 1);
return ret;
}
@@ -638,9 +623,9 @@ ___tcdrain(int fd)
struct pthread *curthread = _get_curthread();
int ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __tcdrain(fd);
- _thr_cancel_leave_defer(curthread, ret == -1);
+ _thr_cancel_leave(curthread, ret == -1);
return (ret);
}
@@ -654,7 +639,7 @@ ___usleep(useconds_t useconds)
_thr_cancel_enter(curthread);
ret = __usleep(useconds);
- _thr_cancel_leave(curthread);
+ _thr_cancel_leave(curthread, 1);
return (ret);
}
@@ -672,9 +657,9 @@ ___wait(int *istat)
struct pthread *curthread = _get_curthread();
pid_t ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __wait(istat);
- _thr_cancel_leave_defer(curthread, ret <= 0);
+ _thr_cancel_leave(curthread, ret <= 0);
return ret;
}
@@ -692,9 +677,9 @@ __wait3(int *status, int options, struct rusage *rusage)
struct pthread *curthread = _get_curthread();
pid_t ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = _wait4(WAIT_ANY, status, options, rusage);
- _thr_cancel_leave_defer(curthread, ret <= 0);
+ _thr_cancel_leave(curthread, ret <= 0);
return (ret);
}
@@ -712,9 +697,9 @@ __wait4(pid_t pid, int *status, int options, struct rusage *rusage)
struct pthread *curthread = _get_curthread();
pid_t ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __sys_wait4(pid, status, options, rusage);
- _thr_cancel_leave_defer(curthread, ret <= 0);
+ _thr_cancel_leave(curthread, ret <= 0);
return ret;
}
@@ -732,9 +717,9 @@ ___waitpid(pid_t wpid, int *status, int options)
struct pthread *curthread = _get_curthread();
pid_t ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __waitpid(wpid, status, options);
- _thr_cancel_leave_defer(curthread, ret <= 0);
+ _thr_cancel_leave(curthread, ret <= 0);
return ret;
}
@@ -752,9 +737,9 @@ __write(int fd, const void *buf, size_t nbytes)
struct pthread *curthread = _get_curthread();
ssize_t ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __sys_write(fd, buf, nbytes);
- _thr_cancel_leave_defer(curthread, (ret <= 0));
+ _thr_cancel_leave(curthread, (ret <= 0));
return ret;
}
@@ -771,8 +756,8 @@ __writev(int fd, const struct iovec *iov, int iovcnt)
struct pthread *curthread = _get_curthread();
ssize_t ret;
- _thr_cancel_enter_defer(curthread, 1);
+ _thr_cancel_enter(curthread);
ret = __sys_writev(fd, iov, iovcnt);
- _thr_cancel_leave_defer(curthread, (ret <= 0));
+ _thr_cancel_leave(curthread, (ret <= 0));
return ret;
}
OpenPOWER on IntegriCloud