… | |
… | |
161 | |
161 | |
162 | enum { |
162 | enum { |
163 | REQ_QUIT, |
163 | REQ_QUIT, |
164 | REQ_ENV_OPEN, REQ_ENV_CLOSE, REQ_ENV_TXN_CHECKPOINT, REQ_ENV_LOCK_DETECT, |
164 | REQ_ENV_OPEN, REQ_ENV_CLOSE, REQ_ENV_TXN_CHECKPOINT, REQ_ENV_LOCK_DETECT, |
165 | REQ_ENV_MEMP_SYNC, REQ_ENV_MEMP_TRICKLE, REQ_ENV_DBREMOVE, REQ_ENV_DBRENAME, |
165 | REQ_ENV_MEMP_SYNC, REQ_ENV_MEMP_TRICKLE, REQ_ENV_DBREMOVE, REQ_ENV_DBRENAME, |
166 | REQ_ENV_LOG_ARCHIVE, |
166 | REQ_ENV_LOG_ARCHIVE, REQ_ENV_LSN_RESET, |
167 | REQ_DB_OPEN, REQ_DB_CLOSE, REQ_DB_COMPACT, REQ_DB_SYNC, REQ_DB_VERIFY, REQ_DB_UPGRADE, |
167 | REQ_DB_OPEN, REQ_DB_CLOSE, REQ_DB_COMPACT, REQ_DB_SYNC, REQ_DB_VERIFY, REQ_DB_UPGRADE, |
168 | REQ_DB_PUT, REQ_DB_EXISTS, REQ_DB_GET, REQ_DB_PGET, REQ_DB_DEL, REQ_DB_KEY_RANGE, |
168 | REQ_DB_PUT, REQ_DB_EXISTS, REQ_DB_GET, REQ_DB_PGET, REQ_DB_DEL, REQ_DB_KEY_RANGE, |
169 | REQ_TXN_COMMIT, REQ_TXN_ABORT, REQ_TXN_FINISH, |
169 | REQ_TXN_COMMIT, REQ_TXN_ABORT, REQ_TXN_FINISH, |
170 | REQ_C_CLOSE, REQ_C_COUNT, REQ_C_PUT, REQ_C_GET, REQ_C_PGET, REQ_C_DEL, |
170 | REQ_C_CLOSE, REQ_C_COUNT, REQ_C_PUT, REQ_C_GET, REQ_C_PGET, REQ_C_DEL, |
171 | REQ_SEQ_OPEN, REQ_SEQ_CLOSE, REQ_SEQ_GET, REQ_SEQ_REMOVE, |
171 | REQ_SEQ_OPEN, REQ_SEQ_CLOSE, REQ_SEQ_GET, REQ_SEQ_REMOVE, |
… | |
… | |
859 | case REQ_SEQ_REMOVE: |
859 | case REQ_SEQ_REMOVE: |
860 | req->result = req->seq->remove (req->seq, req->txn, req->uint1); |
860 | req->result = req->seq->remove (req->seq, req->txn, req->uint1); |
861 | break; |
861 | break; |
862 | #endif |
862 | #endif |
863 | |
863 | |
|
|
864 | case REQ_ENV_LSN_RESET: |
|
|
865 | req->result = req->env->lsn_reset (req->env, req->buf1, req->uint1); |
|
|
866 | break; |
|
|
867 | |
864 | case REQ_ENV_LOG_ARCHIVE: |
868 | case REQ_ENV_LOG_ARCHIVE: |
865 | { |
869 | { |
866 | char **listp = 0; /* DB_ARCH_REMOVE does not touch listp, contrary to docs */ |
870 | char **listp = 0; /* DB_ARCH_REMOVE does not touch listp, contrary to docs */ |
867 | req->result = req->env->log_archive (req->env, &listp, req->uint1); |
871 | req->result = req->env->log_archive (req->env, &listp, req->uint1); |
868 | req->buf1 = (char *)listp; |
872 | req->buf1 = (char *)listp; |
… | |
… | |
1014 | next_pri = DEFAULT_PRI + PRI_BIAS; \ |
1018 | next_pri = DEFAULT_PRI + PRI_BIAS; \ |
1015 | \ |
1019 | \ |
1016 | if (callback && SvOK (callback)) \ |
1020 | if (callback && SvOK (callback)) \ |
1017 | croak ("callback has illegal type or extra arguments"); \ |
1021 | croak ("callback has illegal type or extra arguments"); \ |
1018 | \ |
1022 | \ |
1019 | Newz (0, req, 1, bdb_cb); \ |
1023 | Newz (0, req, 1, bdb_cb); \ |
1020 | if (!req) \ |
1024 | if (!req) \ |
1021 | croak ("out of memory during bdb_req allocation"); \ |
1025 | croak ("out of memory during bdb_req allocation"); \ |
1022 | \ |
1026 | \ |
1023 | req->callback = SvREFCNT_inc (cb); \ |
1027 | req->callback = SvREFCNT_inc (cb); \ |
1024 | req->type = (reqtype); \ |
1028 | req->type = (reqtype); \ |
1025 | req->pri = req_pri; \ |
1029 | req->pri = req_pri; \ |
1026 | if (rsvcnt >= 1) req->rsv1 = SvREFCNT_inc (ST (0)); \ |
1030 | if (rsvcnt >= 1) req->rsv1 = SvREFCNT_inc (ST (0)); \ |
1027 | if (rsvcnt >= 2) req->rsv2 = SvREFCNT_inc (ST (1)); \ |
1031 | if (rsvcnt >= 2) req->rsv2 = SvREFCNT_inc (ST (1)); \ |
1028 | (void)0; |
1032 | (void)0; |
1029 | |
1033 | |
1030 | #define REQ_SEND \ |
1034 | #define REQ_SEND \ |
1031 | req_send (req) |
1035 | req_send (req) |
1032 | |
1036 | |
1033 | #define SvPTR(var, arg, type, stash, class, nullok) \ |
1037 | #define SvPTR(var, arg, type, stash, class, nullok) \ |
1034 | if (!SvOK (arg)) \ |
1038 | if (!SvOK (arg)) \ |
1035 | { \ |
1039 | { \ |
1036 | if (nullok != 1) \ |
1040 | if (nullok != 1) \ |
1037 | croak (# var " must be a " # class " object, not undef"); \ |
1041 | croak (# var " must be a " # class " object, not undef"); \ |
1038 | \ |
1042 | \ |
… | |
… | |
1712 | req->uint1 = flags; |
1716 | req->uint1 = flags; |
1713 | REQ_SEND; |
1717 | REQ_SEND; |
1714 | } |
1718 | } |
1715 | |
1719 | |
1716 | void |
1720 | void |
|
|
1721 | db_env_lsn_reset (DB_ENV *env, bdb_filename db, U32 flags = 0, SV *callback = 0) |
|
|
1722 | PREINIT: |
|
|
1723 | CALLBACK |
|
|
1724 | CODE: |
|
|
1725 | { |
|
|
1726 | dREQ (REQ_ENV_LSN_RESET, 1); |
|
|
1727 | req->env = env; |
|
|
1728 | req->uint1 = flags; |
|
|
1729 | req->buf1 = strdup_ornull (db); |
|
|
1730 | REQ_SEND; |
|
|
1731 | } |
|
|
1732 | |
|
|
1733 | void |
1717 | db_env_log_archive (DB_ENV *env, SV_mutable *listp, U32 flags = 0, SV *callback = 0) |
1734 | db_env_log_archive (DB_ENV *env, SV_mutable *listp, U32 flags = 0, SV *callback = 0) |
1718 | PREINIT: |
1735 | PREINIT: |
1719 | CALLBACK |
1736 | CALLBACK |
1720 | CODE: |
1737 | CODE: |
1721 | { |
1738 | { |