… | |
… | |
224 | static int next_pri = DEFAULT_PRI + PRI_BIAS; |
224 | static int next_pri = DEFAULT_PRI + PRI_BIAS; |
225 | |
225 | |
226 | static unsigned int started, idle, wanted; |
226 | static unsigned int started, idle, wanted; |
227 | |
227 | |
228 | /* worker threads management */ |
228 | /* worker threads management */ |
229 | static mutex_t wrklock = X_MUTEX_INIT; |
229 | static xmutex_t wrklock = X_MUTEX_INIT; |
230 | |
230 | |
231 | typedef struct worker { |
231 | typedef struct worker { |
232 | /* locked by wrklock */ |
232 | /* locked by wrklock */ |
233 | struct worker *prev, *next; |
233 | struct worker *prev, *next; |
234 | |
234 | |
235 | thread_t tid; |
235 | xthread_t tid; |
236 | |
236 | |
237 | /* locked by reslock, reqlock or wrklock */ |
237 | /* locked by reslock, reqlock or wrklock */ |
238 | bdb_req req; /* currently processed request */ |
238 | bdb_req req; /* currently processed request */ |
239 | void *dbuf; |
239 | void *dbuf; |
240 | DIR *dirp; |
240 | DIR *dirp; |
… | |
… | |
257 | static volatile unsigned int nreqs, nready, npending; |
257 | static volatile unsigned int nreqs, nready, npending; |
258 | static volatile unsigned int max_idle = 4; |
258 | static volatile unsigned int max_idle = 4; |
259 | static volatile unsigned int max_outstanding = 0xffffffff; |
259 | static volatile unsigned int max_outstanding = 0xffffffff; |
260 | static s_epipe respipe; |
260 | static s_epipe respipe; |
261 | |
261 | |
262 | static mutex_t reslock = X_MUTEX_INIT; |
262 | static xmutex_t reslock = X_MUTEX_INIT; |
263 | static mutex_t reqlock = X_MUTEX_INIT; |
263 | static xmutex_t reqlock = X_MUTEX_INIT; |
264 | static cond_t reqwait = X_COND_INIT; |
264 | static xcond_t reqwait = X_COND_INIT; |
265 | |
265 | |
266 | #if WORDACCESS_UNSAFE |
266 | #if WORDACCESS_UNSAFE |
267 | |
267 | |
268 | static unsigned int get_nready (void) |
268 | static unsigned int get_nready (void) |
269 | { |
269 | { |
… | |
… | |
1226 | const_iv (TXN_NOT_DURABLE) |
1226 | const_iv (TXN_NOT_DURABLE) |
1227 | const_iv (TXN_WRITE_NOSYNC) |
1227 | const_iv (TXN_WRITE_NOSYNC) |
1228 | const_iv (WRITECURSOR) |
1228 | const_iv (WRITECURSOR) |
1229 | const_iv (YIELDCPU) |
1229 | const_iv (YIELDCPU) |
1230 | const_iv (ENCRYPT_AES) |
1230 | const_iv (ENCRYPT_AES) |
|
|
1231 | #if DB_VERSION_MINOR < 8 |
1231 | const_iv (XA_CREATE) |
1232 | const_iv (XA_CREATE) |
|
|
1233 | #endif |
1232 | const_iv (BTREE) |
1234 | const_iv (BTREE) |
1233 | const_iv (HASH) |
1235 | const_iv (HASH) |
1234 | const_iv (QUEUE) |
1236 | const_iv (QUEUE) |
1235 | const_iv (RECNO) |
1237 | const_iv (RECNO) |
1236 | const_iv (UNKNOWN) |
1238 | const_iv (UNKNOWN) |
… | |
… | |
1300 | const_iv (LOCK_OLDEST) |
1302 | const_iv (LOCK_OLDEST) |
1301 | const_iv (LOCK_RANDOM) |
1303 | const_iv (LOCK_RANDOM) |
1302 | const_iv (LOCK_YOUNGEST) |
1304 | const_iv (LOCK_YOUNGEST) |
1303 | |
1305 | |
1304 | const_iv (DONOTINDEX) |
1306 | const_iv (DONOTINDEX) |
1305 | const_iv (KEYEMPTY ) |
1307 | const_iv (KEYEMPTY) |
1306 | const_iv (KEYEXIST ) |
1308 | const_iv (KEYEXIST) |
1307 | const_iv (LOCK_DEADLOCK) |
1309 | const_iv (LOCK_DEADLOCK) |
1308 | const_iv (LOCK_NOTGRANTED) |
1310 | const_iv (LOCK_NOTGRANTED) |
1309 | const_iv (NOSERVER) |
1311 | const_iv (NOSERVER) |
1310 | const_iv (NOSERVER_HOME) |
1312 | const_iv (NOSERVER_HOME) |
1311 | const_iv (NOSERVER_ID) |
1313 | const_iv (NOSERVER_ID) |
… | |
… | |
1340 | const_iv (VERB_WAITSFOR) |
1342 | const_iv (VERB_WAITSFOR) |
1341 | |
1343 | |
1342 | const_iv (VERSION_MAJOR) |
1344 | const_iv (VERSION_MAJOR) |
1343 | const_iv (VERSION_MINOR) |
1345 | const_iv (VERSION_MINOR) |
1344 | const_iv (VERSION_PATCH) |
1346 | const_iv (VERSION_PATCH) |
|
|
1347 | const_iv (LOGVERSION) |
|
|
1348 | const_iv (LOGOLDVER) |
1345 | #if DB_VERSION_MINOR >= 3 |
1349 | #if DB_VERSION_MINOR >= 3 |
1346 | const_iv (INORDER) |
1350 | const_iv (INORDER) |
1347 | const_iv (LOCK_MAXWRITE) |
1351 | const_iv (LOCK_MAXWRITE) |
1348 | const_iv (SEQ_DEC) |
1352 | const_iv (SEQ_DEC) |
1349 | const_iv (SEQ_INC) |
1353 | const_iv (SEQ_INC) |
… | |
… | |
1390 | const_iv (LOG_AUTOREMOVE) |
1394 | const_iv (LOG_AUTOREMOVE) |
1391 | # if DB_VERSION_MINOR >= 3 |
1395 | # if DB_VERSION_MINOR >= 3 |
1392 | const_iv (DSYNC_LOG) |
1396 | const_iv (DSYNC_LOG) |
1393 | const_iv (LOG_INMEMORY) |
1397 | const_iv (LOG_INMEMORY) |
1394 | # endif |
1398 | # endif |
|
|
1399 | #if DB_VERSION_MINOR >= 8 |
|
|
1400 | const_iv (LOGVERSION_LATCHING) |
|
|
1401 | #endif |
1395 | #endif |
1402 | #endif |
1396 | }; |
1403 | }; |
1397 | |
1404 | |
1398 | bdb_stash = gv_stashpv ("BDB" , 1); |
1405 | bdb_stash = gv_stashpv ("BDB" , 1); |
1399 | bdb_env_stash = gv_stashpv ("BDB::Env" , 1); |
1406 | bdb_env_stash = gv_stashpv ("BDB::Env" , 1); |
1400 | bdb_txn_stash = gv_stashpv ("BDB::Txn" , 1); |
1407 | bdb_txn_stash = gv_stashpv ("BDB::Txn" , 1); |
1401 | bdb_cursor_stash = gv_stashpv ("BDB::Cursor" , 1); |
1408 | bdb_cursor_stash = gv_stashpv ("BDB::Cursor" , 1); |
1402 | bdb_db_stash = gv_stashpv ("BDB::Db" , 1); |
1409 | bdb_db_stash = gv_stashpv ("BDB::Db" , 1); |
1403 | bdb_sequence_stash = gv_stashpv ("BDB::Sequence", 1); |
1410 | bdb_sequence_stash = gv_stashpv ("BDB::Sequence", 1); |
1404 | |
1411 | |
1405 | for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; ) |
1412 | for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ > const_iv; civ--) |
1406 | newCONSTSUB (bdb_stash, (char *)civ->name, newSViv (civ->iv)); |
1413 | newCONSTSUB (bdb_stash, (char *)civ[-1].name, newSViv (civ[-1].iv)); |
1407 | |
1414 | |
1408 | prepare_cb = &PL_sv_undef; |
1415 | prepare_cb = &PL_sv_undef; |
1409 | |
1416 | |
1410 | { |
1417 | { |
1411 | /* we currently only allow version, minor-version and patchlevel to go up to 255 */ |
1418 | /* we currently only allow version, minor-version and patchlevel to go up to 255 */ |