[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: library/1769: pthreads SEGV in thread_machdep_switch
- To: bugs_(_at_)_cvs_(_dot_)_openbsd_(_dot_)_org
- Subject: Re: library/1769: pthreads SEGV in thread_machdep_switch
- From: "Stephen J. Bevan" <stephen_(_at_)_etunnels_(_dot_)_com>
- Date: Fri, 13 Apr 2001 14:00:02 -0600 (MDT)
- Cc:
- Reply-to: "Stephen J. Bevan" <stephen_(_at_)_etunnels_(_dot_)_com>
The following reply was made to PR library/1769; it has been noted by GNATS.
From: "Stephen J. Bevan" <stephen_(_at_)_etunnels_(_dot_)_com>
To: gnats_(_at_)_cvs_(_dot_)_openbsd_(_dot_)_org, bugs_(_at_)_cvs_(_dot_)_openbsd_(_dot_)_org
Cc: stephen_(_at_)_etunnels_(_dot_)_com
Subject: Re: library/1769: pthreads SEGV in thread_machdep_switch
Date: Fri, 13 Apr 2001 12:53:36 -0700
Looking at the report for 1769 I noticed that I'd omitted to files:
io.h and io.c :-
$ cat io.h
#include <stddef.h>
int readn(int, void *, size_t);
int writen(int, const void *, size_t);
$ cat io.c
/*
* $Id$
*/
#include <errno.h>
#include <stddef.h>
#include <unistd.h>
#include <sys/uio.h>
#include <sys/types.h>
#include "io.h"
int readn(int fd, void * buffer, size_t count)
{
ssize_t n_read;
size_t n_to_read = count;
char * b = (char *)buffer;
for (;;) {
n_read = read(fd, b, n_to_read);
if (n_read == n_to_read) {
break;
} else if (n_read == 0) {
return 0;
} else if (n_read >= 0) {
b += n_read;
n_to_read -= n_read;
} else {
switch (errno) {
case EINTR:
continue;
default:
return -1;
}
}
}
return 1;
}
int writen(int fd, const void * buffer, size_t count)
{
ssize_t n_written;
size_t n_to_write = count;
char * b = (char *)buffer;
for (;;) {
n_written = write(fd, b, n_to_write);
if (n_written == n_to_write) {
break;
} else if (n_written >= 0) {
b += n_written;
n_to_write -= n_written;
} else {
switch (errno) {
case EINTR:
continue;
case EAGAIN:
return 0;
default:
return -1;
}
}
}
return 1;
}
$
Visit your host, monkey.org