|
|
|
@ -9787,17 +9787,17 @@ mdb_env_copythr(void *arg) |
|
|
|
|
#define DO_WRITE(rc, fd, ptr, w2, len) rc = WriteFile(fd, ptr, w2, &len, NULL) |
|
|
|
|
#else |
|
|
|
|
int len; |
|
|
|
|
sigset_t set; |
|
|
|
|
#define DO_WRITE(rc, fd, ptr, w2, len) len = write(fd, ptr, w2); rc = (len >= 0) |
|
|
|
|
|
|
|
|
|
#ifdef SIGPIPE |
|
|
|
|
sigset_t set; |
|
|
|
|
sigemptyset(&set); |
|
|
|
|
sigaddset(&set, SIGPIPE); |
|
|
|
|
if ((rc = pthread_sigmask(SIG_BLOCK, &set, NULL)) != 0) |
|
|
|
|
my->mc_error = rc; |
|
|
|
|
#endif |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
pthread_mutex_lock(&my->mc_mutex); |
|
|
|
|
#ifndef _WIN32 |
|
|
|
|
my->mc_error = pthread_sigmask(SIG_BLOCK, &set, NULL); |
|
|
|
|
#endif |
|
|
|
|
for(;;) { |
|
|
|
|
while (!my->mc_new) |
|
|
|
|
pthread_cond_wait(&my->mc_cond, &my->mc_mutex); |
|
|
|
@ -9811,8 +9811,11 @@ again: |
|
|
|
|
DO_WRITE(rc, my->mc_fd, ptr, wsize, len); |
|
|
|
|
if (!rc) { |
|
|
|
|
rc = ErrCode(); |
|
|
|
|
#ifndef _WIN32 |
|
|
|
|
#if defined(SIGPIPE) && !defined(_WIN32) |
|
|
|
|
if (rc == EPIPE) { |
|
|
|
|
/* Collect the pending SIGPIPE, otherwise at least OS X
|
|
|
|
|
* gives it to the process on thread-exit (ITS#8504). |
|
|
|
|
*/ |
|
|
|
|
int tmp; |
|
|
|
|
sigwait(&set, &tmp); |
|
|
|
|
} |
|
|
|
|