ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/BDB/BDB.xs
(Generate patch)

Comparing BDB/BDB.xs (file contents):
Revision 1.16 by root, Mon Aug 13 12:01:45 2007 UTC vs.
Revision 1.17 by root, Thu Sep 13 21:34:00 2007 UTC

104 REQ_QUIT, 104 REQ_QUIT,
105 REQ_ENV_OPEN, REQ_ENV_CLOSE, REQ_ENV_TXN_CHECKPOINT, REQ_ENV_LOCK_DETECT, 105 REQ_ENV_OPEN, REQ_ENV_CLOSE, REQ_ENV_TXN_CHECKPOINT, REQ_ENV_LOCK_DETECT,
106 REQ_ENV_MEMP_SYNC, REQ_ENV_MEMP_TRICKLE, 106 REQ_ENV_MEMP_SYNC, REQ_ENV_MEMP_TRICKLE,
107 REQ_DB_OPEN, REQ_DB_CLOSE, REQ_DB_COMPACT, REQ_DB_SYNC, 107 REQ_DB_OPEN, REQ_DB_CLOSE, REQ_DB_COMPACT, REQ_DB_SYNC,
108 REQ_DB_PUT, REQ_DB_GET, REQ_DB_PGET, REQ_DB_DEL, REQ_DB_KEY_RANGE, 108 REQ_DB_PUT, REQ_DB_GET, REQ_DB_PGET, REQ_DB_DEL, REQ_DB_KEY_RANGE,
109 REQ_TXN_COMMIT, REQ_TXN_ABORT, 109 REQ_TXN_COMMIT, REQ_TXN_ABORT, REQ_TXN_FINISH,
110 REQ_C_CLOSE, REQ_C_COUNT, REQ_C_PUT, REQ_C_GET, REQ_C_PGET, REQ_C_DEL, 110 REQ_C_CLOSE, REQ_C_COUNT, REQ_C_PUT, REQ_C_GET, REQ_C_PGET, REQ_C_DEL,
111 REQ_SEQ_OPEN, REQ_SEQ_CLOSE, REQ_SEQ_GET, REQ_SEQ_REMOVE, 111 REQ_SEQ_OPEN, REQ_SEQ_CLOSE, REQ_SEQ_GET, REQ_SEQ_REMOVE,
112}; 112};
113 113
114typedef struct aio_cb 114typedef struct aio_cb
668 X_UNLOCK (reqlock); 668 X_UNLOCK (reqlock);
669 669
670 switch (req->type) 670 switch (req->type)
671 { 671 {
672 case REQ_QUIT: 672 case REQ_QUIT:
673 req->result = ENOSYS;
673 goto quit; 674 goto quit;
674 675
675 case REQ_ENV_OPEN: 676 case REQ_ENV_OPEN:
676 req->result = req->env->open (req->env, req->buf1, req->uint1, req->int1); 677 req->result = req->env->open (req->env, req->buf1, req->uint1, req->int1);
677 break; 678 break;
736 req->result = req->txn->commit (req->txn, req->uint1); 737 req->result = req->txn->commit (req->txn, req->uint1);
737 break; 738 break;
738 739
739 case REQ_TXN_ABORT: 740 case REQ_TXN_ABORT:
740 req->result = req->txn->abort (req->txn); 741 req->result = req->txn->abort (req->txn);
742 break;
743
744 case REQ_TXN_FINISH:
745 if (req->txn->flags & TXN_DEADLOCK)
746 req->result = req->txn->commit (req->txn, req->uint1);
747 else
748 {
749 req->result = req->txn->abort (req->txn);
750 if (!req->result)
751 req->result = DB_LOCK_DEADLOCK;
752 }
741 break; 753 break;
742 754
743 case REQ_C_CLOSE: 755 case REQ_C_CLOSE:
744 req->result = req->dbc->c_close (req->dbc); 756 req->result = req->dbc->c_close (req->dbc);
745 break; 757 break;
786 798
787 default: 799 default:
788 req->result = ENOSYS; 800 req->result = ENOSYS;
789 break; 801 break;
790 } 802 }
803
804 if (req->txn && (req->result > 0 || req->result == DB_LOCK_NOTGRANTED))
805 req->txn->flags |= TXN_DEADLOCK;
791 806
792 X_LOCK (reslock); 807 X_LOCK (reslock);
793 808
794 ++npending; 809 ++npending;
795 810
1500 REQ_SEND; 1515 REQ_SEND;
1501 ptr_nuke (ST (0)); 1516 ptr_nuke (ST (0));
1502} 1517}
1503 1518
1504void 1519void
1520db_txn_finish (DB_TXN *txn, U32 flags = 0, SV *callback = &PL_sv_undef)
1521 CODE:
1522{
1523 dREQ (REQ_TXN_FINISH);
1524 req->txn = txn;
1525 req->uint1 = flags;
1526 REQ_SEND;
1527 ptr_nuke (ST (0));
1528}
1529
1530void
1505db_c_close (DBC *dbc, SV *callback = &PL_sv_undef) 1531db_c_close (DBC *dbc, SV *callback = &PL_sv_undef)
1506 CODE: 1532 CODE:
1507{ 1533{
1508 dREQ (REQ_C_CLOSE); 1534 dREQ (REQ_C_CLOSE);
1509 req->dbc = dbc; 1535 req->dbc = dbc;
1707 CODE: 1733 CODE:
1708 RETVAL = env->set_encrypt (env, password, flags); 1734 RETVAL = env->set_encrypt (env, password, flags);
1709 OUTPUT: 1735 OUTPUT:
1710 RETVAL 1736 RETVAL
1711 1737
1712int set_timeout (DB_ENV *env, NV timeout, U32 flags) 1738int set_timeout (DB_ENV *env, NV timeout, U32 flags = DB_SET_TXN_TIMEOUT)
1713 CODE: 1739 CODE:
1714 RETVAL = env->set_timeout (env, timeout * 1000000, flags); 1740 RETVAL = env->set_timeout (env, timeout * 1000000, flags);
1715 OUTPUT: 1741 OUTPUT:
1716 RETVAL 1742 RETVAL
1717 1743
1889DESTROY (DB_TXN_ornull *txn) 1915DESTROY (DB_TXN_ornull *txn)
1890 CODE: 1916 CODE:
1891 if (txn) 1917 if (txn)
1892 txn->abort (txn); 1918 txn->abort (txn);
1893 1919
1894int set_timeout (DB_TXN *txn, NV timeout, U32 flags) 1920int set_timeout (DB_TXN *txn, NV timeout, U32 flags = DB_SET_TXN_TIMEOUT)
1895 CODE: 1921 CODE:
1896 RETVAL = txn->set_timeout (txn, timeout * 1000000, flags); 1922 RETVAL = txn->set_timeout (txn, timeout * 1000000, flags);
1923 OUTPUT:
1924 RETVAL
1925
1926int failed (DB_TXN *txn)
1927 CODE:
1928 RETVAL = !!(txn->flags & TXN_DEADLOCK);
1897 OUTPUT: 1929 OUTPUT:
1898 RETVAL 1930 RETVAL
1899 1931
1900 1932
1901MODULE = BDB PACKAGE = BDB::Cursor 1933MODULE = BDB PACKAGE = BDB::Cursor

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines