Date: Wed, 5 Jan 2005 14:53:55 GMT From: David Xu <davidxu@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 68322 for review Message-ID: <200501051453.j05ErtkX014116@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=68322 Change 68322 by davidxu@davidxu_tiger on 2005/01/05 14:53:37 add missing cancellation points. Affected files ... .. //depot/projects/davidxu_thread/src/lib/libthread/pthread.map#4 edit .. //depot/projects/davidxu_thread/src/lib/libthread/thread/thr_private.h#16 edit .. //depot/projects/davidxu_thread/src/lib/libthread/thread/thr_syscalls.c#4 edit Differences ... ==== //depot/projects/davidxu_thread/src/lib/libthread/pthread.map#4 (text+ko) ==== @@ -20,7 +20,11 @@ __pthread_mutex_timedlock; __read; __readv; + __recvfrom; + __recvmsg; __select; + __sendmsg; + __sendto; __sigsuspend; __wait4; __write; @@ -298,7 +302,8 @@ raise; read; readv; - sched_yield; + recvfrom; + recvmsg; select; sem_close; sem_destroy; @@ -310,6 +315,8 @@ sem_trywait; sem_unlink; sem_wait; + sendmsg; + sendto; sigaction; sigaltstack; sigpending; ==== //depot/projects/davidxu_thread/src/lib/libthread/thread/thr_private.h#16 (text+ko) ==== @@ -794,8 +794,13 @@ #ifdef _SYS_SOCKET_H_ int __sys_accept(int, struct sockaddr *, socklen_t *); int __sys_connect(int, const struct sockaddr *, socklen_t); +ssize_t __sys_recv(int, void *, size_t, int); +ssize_t __sys_recvfrom(int, void *, size_t, int, struct sockaddr *, socklen_t *); +ssize_t __sys_recvmsg(int, struct msghdr *, int); int __sys_sendfile(int, int, off_t, size_t, struct sf_hdtr *, off_t *, int); +ssize_t __sys_sendmsg(int, const struct msghdr *, int); +ssize_t __sys_sendto(int, const void *,size_t, int, const struct sockaddr *, socklen_t); #endif /* #include <sys/uio.h> */ ==== //depot/projects/davidxu_thread/src/lib/libthread/thread/thr_syscalls.c#4 (text+ko) ==== @@ -363,6 +363,37 @@ return ret; } +__weak_reference(__recvfrom, recvfrom); + +ssize_t +__recvfrom(int s, void *b, size_t l, int f, struct sockaddr *from, + socklen_t *fl) +{ + struct pthread *curthread = _get_curthread(); + int oldcancel; + ssize_t ret; + + oldcancel = _thr_cancel_enter(curthread); + ret = __sys_recvfrom(s, b, l, f, from, fl); + _thr_cancel_leave(curthread, oldcancel); + return (ret); +} + +__weak_reference(__recvmsg, recvmsg); + +ssize_t +__recvmsg(int s, struct msghdr *m, int f) +{ + struct pthread *curthread = _get_curthread(); + ssize_t ret; + int oldcancel; + + oldcancel = _thr_cancel_enter(curthread); + ret = __sys_recvmsg(s, m, f); + _thr_cancel_leave(curthread, oldcancel); + return (ret); +} + __weak_reference(__select, select); int @@ -379,6 +410,37 @@ return ret; } +__weak_reference(__sendmsg, sendmsg); + +ssize_t +__sendmsg(int s, const struct msghdr *m, int f) +{ + struct pthread *curthread = _get_curthread(); + ssize_t ret; + int oldcancel; + + oldcancel = _thr_cancel_enter(curthread); + ret = __sys_sendmsg(s, m, f); + _thr_cancel_leave(curthread, oldcancel); + return (ret); +} + +__weak_reference(__sendto, sendto); + +ssize_t +__sendto(int s, const void *m, size_t l, int f, const struct sockaddr *t, + socklen_t tl) +{ + struct pthread *curthread = _get_curthread(); + ssize_t ret; + int oldcancel; + + oldcancel = _thr_cancel_enter(curthread); + ret = __sys_sendto(s, m, l, f, t, tl); + _thr_cancel_leave(curthread, oldcancel); + return (ret); +} + __weak_reference(_sigaction, sigaction); int
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200501051453.j05ErtkX014116>