Skip site navigation (1)Skip section navigation (2)
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>