]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Make recvfrom() block only the calling thread, not the whole system
authorJulian Seward <jseward@acm.org>
Thu, 13 Jun 2002 17:29:53 +0000 (17:29 +0000)
committerJulian Seward <jseward@acm.org>
Thu, 13 Jun 2002 17:29:53 +0000 (17:29 +0000)
( same trick as used for accept() ).

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@415

coregrind/arch/x86-linux/vg_libpthread.c
coregrind/vg_libpthread.c
vg_libpthread.c

index 5a76219fecec24e262f949bc318ca16f70763469..6911474b86b77f1e354a2d7a5057c4b31a74ccf2 100644 (file)
@@ -1659,6 +1659,8 @@ __attribute__((weak))
 int recvfrom(int s, void *buf, size_t len, int flags,
              struct sockaddr *from, socklen_t *fromlen)
 {
+   __my_pthread_testcancel();
+   wait_for_fd_to_be_readable_or_erring(s);
    __my_pthread_testcancel();
    return __libc_recvfrom(s, buf, len, flags, from, fromlen);
 }
index 5a76219fecec24e262f949bc318ca16f70763469..6911474b86b77f1e354a2d7a5057c4b31a74ccf2 100644 (file)
@@ -1659,6 +1659,8 @@ __attribute__((weak))
 int recvfrom(int s, void *buf, size_t len, int flags,
              struct sockaddr *from, socklen_t *fromlen)
 {
+   __my_pthread_testcancel();
+   wait_for_fd_to_be_readable_or_erring(s);
    __my_pthread_testcancel();
    return __libc_recvfrom(s, buf, len, flags, from, fromlen);
 }
index 5a76219fecec24e262f949bc318ca16f70763469..6911474b86b77f1e354a2d7a5057c4b31a74ccf2 100644 (file)
@@ -1659,6 +1659,8 @@ __attribute__((weak))
 int recvfrom(int s, void *buf, size_t len, int flags,
              struct sockaddr *from, socklen_t *fromlen)
 {
+   __my_pthread_testcancel();
+   wait_for_fd_to_be_readable_or_erring(s);
    __my_pthread_testcancel();
    return __libc_recvfrom(s, buf, len, flags, from, fromlen);
 }