From owner-p4-projects@FreeBSD.ORG Wed Jan 5 14:53:56 2005 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 20B7716A4D0; Wed, 5 Jan 2005 14:53:56 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id BA57316A4CE for ; Wed, 5 Jan 2005 14:53:55 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9E31F43D1F for ; Wed, 5 Jan 2005 14:53:55 +0000 (GMT) (envelope-from davidxu@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id j05ErtMX014119 for ; Wed, 5 Jan 2005 14:53:55 GMT (envelope-from davidxu@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j05ErtkX014116 for perforce@freebsd.org; Wed, 5 Jan 2005 14:53:55 GMT (envelope-from davidxu@freebsd.org) Date: Wed, 5 Jan 2005 14:53:55 GMT Message-Id: <200501051453.j05ErtkX014116@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to davidxu@freebsd.org using -f From: David Xu To: Perforce Change Reviews Subject: PERFORCE change 68322 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 05 Jan 2005 14:53:56 -0000 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 */ ==== //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