PERFORCE change 68322 for review
David Xu
davidxu at FreeBSD.org
Wed Jan 5 06:53:56 PST 2005
http://perforce.freebsd.org/chv.cgi?CH=68322
Change 68322 by davidxu at 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
More information about the p4-projects
mailing list