summaryrefslogtreecommitdiff
path: root/lib/libpthread
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libpthread')
-rw-r--r--lib/libpthread/uthread/uthread_poll.c3
-rw-r--r--lib/libpthread/uthread/uthread_readv.c3
-rw-r--r--lib/libpthread/uthread/uthread_writev.c8
3 files changed, 10 insertions, 4 deletions
diff --git a/lib/libpthread/uthread/uthread_poll.c b/lib/libpthread/uthread/uthread_poll.c
index 7dbb9c30ead..dc276fa350a 100644
--- a/lib/libpthread/uthread/uthread_poll.c
+++ b/lib/libpthread/uthread/uthread_poll.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uthread_poll.c,v 1.10 2004/01/19 17:53:38 millert Exp $ */
+/* $OpenBSD: uthread_poll.c,v 1.11 2004/11/30 00:14:51 pat Exp $ */
/*
* Copyright (c) 1999 Daniel Eischen <eischen@vigrid.com>
* All rights reserved.
@@ -73,6 +73,7 @@ poll(struct pollfd fds[], nfds_t nfds, int timeout)
} else if (timeout < 0) {
/* a timeout less than zero but not == INFTIM is invalid */
errno = EINVAL;
+ _thread_leave_cancellation_point();
return (-1);
}
diff --git a/lib/libpthread/uthread/uthread_readv.c b/lib/libpthread/uthread/uthread_readv.c
index 80a91e29637..f87fa652c38 100644
--- a/lib/libpthread/uthread/uthread_readv.c
+++ b/lib/libpthread/uthread/uthread_readv.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uthread_readv.c,v 1.6 2004/01/01 08:19:33 brad Exp $ */
+/* $OpenBSD: uthread_readv.c,v 1.7 2004/11/30 00:14:51 pat Exp $ */
/*
* Copyright (c) 1995-1998 John Birrell <jb@cimlogic.com.au>
* All rights reserved.
@@ -62,6 +62,7 @@ readv(int fd, const struct iovec * iov, int iovcnt)
/* File is not open for read: */
errno = EBADF;
_FD_UNLOCK(fd, FD_READ);
+ _thread_leave_cancellation_point();
return (-1);
}
diff --git a/lib/libpthread/uthread/uthread_writev.c b/lib/libpthread/uthread/uthread_writev.c
index fd1c553ef23..6d1981f4461 100644
--- a/lib/libpthread/uthread/uthread_writev.c
+++ b/lib/libpthread/uthread/uthread_writev.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uthread_writev.c,v 1.8 2004/01/01 08:19:33 brad Exp $ */
+/* $OpenBSD: uthread_writev.c,v 1.9 2004/11/30 00:14:51 pat Exp $ */
/*
* Copyright (c) 1995-1998 John Birrell <jb@cimlogic.com.au>
* All rights reserved.
@@ -68,6 +68,7 @@ writev(int fd, const struct iovec * iov, int iovcnt)
malloc(iovcnt * sizeof(struct iovec))) == NULL) {
/* Insufficient memory: */
errno = ENOMEM;
+ _thread_leave_cancellation_point();
return (-1);
}
}
@@ -85,6 +86,9 @@ writev(int fd, const struct iovec * iov, int iovcnt)
/* File is not open for write: */
errno = EBADF;
_FD_UNLOCK(fd, FD_WRITE);
+ if (p_iov != liov)
+ free(p_iov);
+ _thread_leave_cancellation_point();
return (-1);
}
@@ -211,7 +215,7 @@ writev(int fd, const struct iovec * iov, int iovcnt)
/* Return the number of bytes written: */
ret = num;
}
- _FD_UNLOCK(fd, FD_RDWR);
+ _FD_UNLOCK(fd, FD_WRITE);
}
/* If memory was allocated for the array, free it: */