mirror of
https://github.com/isar/libmdbx.git
synced 2024-10-30 11:29:19 +08:00
mdbx: Merge branch 'devel' into 'pt' branch.
This commit is contained in:
commit
a866d8b6c2
5
lmdb.h
5
lmdb.h
@ -1150,8 +1150,9 @@ int mdb_txn_renew(MDB_txn *txn);
|
||||
* This flag may only be used in combination with #MDB_DUPSORT. This option
|
||||
* tells the library that the data items for this database are all the same
|
||||
* size, which allows further optimizations in storage and retrieval. When
|
||||
* all data items are the same size, the #MDB_GET_MULTIPLE and #MDB_NEXT_MULTIPLE
|
||||
* cursor operations may be used to retrieve multiple items at once.
|
||||
* all data items are the same size, the #MDB_GET_MULTIPLE, #MDB_NEXT_MULTIPLE
|
||||
* and #MDB_PREV_MULTIPLE cursor operations may be used to retrieve multiple
|
||||
* items at once.
|
||||
* <li>#MDB_INTEGERDUP
|
||||
* This option specifies that duplicate data items are binary integers,
|
||||
* similar to #MDB_INTEGERKEY keys.
|
||||
|
17
mdb.c
17
mdb.c
@ -9114,6 +9114,14 @@ mdb_env_copythr(void *arg)
|
||||
int toggle = 0, wsize, rc = 0;
|
||||
int len;
|
||||
|
||||
#ifdef SIGPIPE
|
||||
sigset_t set;
|
||||
sigemptyset(&set);
|
||||
sigaddset(&set, SIGPIPE);
|
||||
if ((rc = pthread_sigmask(SIG_BLOCK, &set, NULL)) != 0)
|
||||
my->mc_error = rc;
|
||||
#endif
|
||||
|
||||
pthread_mutex_lock(&my->mc_mutex);
|
||||
for(;;) {
|
||||
while (!my->mc_new)
|
||||
@ -9128,6 +9136,15 @@ again:
|
||||
len = write(my->mc_fd, ptr, wsize);
|
||||
if (len < 0) {
|
||||
rc = errno;
|
||||
#ifdef SIGPIPE
|
||||
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);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
} else if (len > 0) {
|
||||
rc = MDB_SUCCESS;
|
||||
|
Loading…
Reference in New Issue
Block a user