aboutsummaryrefslogtreecommitdiff
path: root/nptl
diff options
context:
space:
mode:
Diffstat (limited to 'nptl')
-rw-r--r--nptl/ChangeLog7
-rw-r--r--nptl/tst-cancel4.c28
2 files changed, 31 insertions, 4 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index b5ec0e44d1..497b33d8a3 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,10 @@
+2005-05-29 Richard Henderson <rth@redhat.com>
+
+ * tst-cancel4.c (WRITE_BUFFER_SIZE): New.
+ (tf_write, tf_writev): Use it.
+ (do_test): Use socketpair instead of pipe. Set SO_SNDBUF to
+ the system minimum.
+
2005-05-23 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
diff --git a/nptl/tst-cancel4.c b/nptl/tst-cancel4.c
index c3e527fd1c..cb7619688e 100644
--- a/nptl/tst-cancel4.c
+++ b/nptl/tst-cancel4.c
@@ -84,6 +84,8 @@ static pthread_barrier_t b2;
# define IPC_ADDVAL 0
#endif
+#define WRITE_BUFFER_SIZE 4096
+
/* Cleanup handling test. */
static int cl_called;
@@ -220,7 +222,7 @@ tf_write (void *arg)
ssize_t s;
pthread_cleanup_push (cl, NULL);
- char buf[100000];
+ char buf[WRITE_BUFFER_SIZE];
memset (buf, '\0', sizeof (buf));
s = write (fd, buf, sizeof (buf));
@@ -266,7 +268,7 @@ tf_writev (void *arg)
ssize_t s;
pthread_cleanup_push (cl, NULL);
- char buf[100000];
+ char buf[WRITE_BUFFER_SIZE];
memset (buf, '\0', sizeof (buf));
struct iovec iov[1] = { [0] = { .iov_base = buf, .iov_len = sizeof (buf) } };
s = writev (fd, iov, 1);
@@ -2043,11 +2045,29 @@ static struct
static int
do_test (void)
{
- if (pipe (fds) != 0)
+ int val;
+ socklen_t len;
+
+ if (socketpair (AF_UNIX, SOCK_STREAM, PF_UNIX, fds) != 0)
+ {
+ perror ("socketpair");
+ exit (1);
+ }
+
+ val = 1;
+ len = sizeof(val);
+ setsockopt (fds[1], SOL_SOCKET, SO_SNDBUF, &val, sizeof(val));
+ if (getsockopt (fds[1], SOL_SOCKET, SO_SNDBUF, &val, &len) < 0)
+ {
+ perror ("getsockopt");
+ exit (1);
+ }
+ if (val >= WRITE_BUFFER_SIZE)
{
- puts ("pipe failed");
+ puts ("minimum write buffer size too large");
exit (1);
}
+ setsockopt (fds[1], SOL_SOCKET, SO_SNDBUF, &val, sizeof(val));
int result = 0;
size_t cnt;