Cleaned up debugging code.
This commit is contained in:
parent
1e3b89e24e
commit
a3ae101dfb
|
@ -206,29 +206,13 @@ static TPool* G_TPOOL_TXNS = NULL;
|
||||||
#define WRITE_LOCK(L) erl_drv_rwlock_rwlock(L)
|
#define WRITE_LOCK(L) erl_drv_rwlock_rwlock(L)
|
||||||
#define WRITE_UNLOCK(L) erl_drv_rwlock_rwunlock(L)
|
#define WRITE_UNLOCK(L) erl_drv_rwlock_rwunlock(L)
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
# define DBG(...) fprintf(stderr, __VA_ARGS__)
|
# define DBG(...) fprintf(stderr, __VA_ARGS__)
|
||||||
static void DBGCMD(PortData *d, const char *fmt, ...)
|
static void DBGCMD(PortData *d, const char *fmt, ...);
|
||||||
{
|
static void DBGCMDRC(PortData *d, int rc);
|
||||||
char buf[1024];
|
|
||||||
|
|
||||||
va_list ap;
|
|
||||||
va_start(ap, fmt);
|
|
||||||
vsnprintf(buf, sizeof(buf), fmt, ap);
|
|
||||||
va_end(ap);
|
|
||||||
|
|
||||||
(void)fprintf(stderr, "threadid %p port %p: %s\r\n", erl_drv_thread_self(), d->port, buf);
|
|
||||||
}
|
|
||||||
static void DBGCMDRC(PortData *d, int rc)
|
|
||||||
{
|
|
||||||
(void)fprintf(stderr, "threadid %p port %p: rc = %s (%d)\r\n",
|
|
||||||
erl_drv_thread_self(), d->port, rc == 0 ? "ok" : bdberl_bdberl_rc_to_atom_str(rc), rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
# define DBG(arg1,...)
|
# define DBG(arg1,...)
|
||||||
# define DBGCMD(d, fmt, ...)
|
# define DBGCMDX(d, fmt, ...)
|
||||||
# define DBGCMDRC(d, rc) { while (0) { rc++; } } // otherwise get unused variable error
|
# define DBGCMDRC(d, rc) { while (0) { rc++; } } // otherwise get unused variable error
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -266,7 +250,7 @@ DRIVER_INIT(bdberl_drv)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DBG("G_DB_ENV->open(%p, 0, %08X, 0);", &G_DB_ENV, flags);
|
DBG("G_DB_ENV->open(%p, 0, %08X, 0)", &G_DB_ENV, flags);
|
||||||
G_DB_ENV_ERROR = G_DB_ENV->open(G_DB_ENV, 0, flags, 0);
|
G_DB_ENV_ERROR = G_DB_ENV->open(G_DB_ENV, 0, flags, 0);
|
||||||
DBG(" = %d\r\n", G_DB_ENV_ERROR);
|
DBG(" = %d\r\n", G_DB_ENV_ERROR);
|
||||||
if (G_DB_ENV_ERROR != 0)
|
if (G_DB_ENV_ERROR != 0)
|
||||||
|
@ -1062,7 +1046,7 @@ static int open_database(const char* name, DBTYPE type, unsigned int flags, Port
|
||||||
DB* db = NULL;
|
DB* db = NULL;
|
||||||
DBGCMD(data, "db_create(&db, %p, 0);", G_DB_ENV);
|
DBGCMD(data, "db_create(&db, %p, 0);", G_DB_ENV);
|
||||||
int rc = db_create(&db, G_DB_ENV, 0);
|
int rc = db_create(&db, G_DB_ENV, 0);
|
||||||
DBGCMD(data, "rc = %s (%d) db = %p", rc == 0 ? "ok" : bdberl_bdberl_rc_to_atom_str(rc), rc, db);
|
DBGCMD(data, "rc = %s (%d) db = %p", rc == 0 ? "ok" : bdberl_rc_to_atom_str(rc), rc, db);
|
||||||
if (rc != 0)
|
if (rc != 0)
|
||||||
{
|
{
|
||||||
// Failure while creating the database handle -- drop our lock and return
|
// Failure while creating the database handle -- drop our lock and return
|
||||||
|
@ -1264,10 +1248,9 @@ void bdberl_async_cleanup(PortData* d)
|
||||||
|
|
||||||
// Convert an rc from BDB into a string suitable for driver_mk_atom
|
// Convert an rc from BDB into a string suitable for driver_mk_atom
|
||||||
// returns NULL on no match
|
// returns NULL on no match
|
||||||
char *bdberl_bdberl_rc_to_atom_str(int rc)
|
char *bdberl_rc_to_atom_str(int rc)
|
||||||
{
|
{
|
||||||
char *error = erl_errno_id(rc);
|
char *error = erl_errno_id(rc);
|
||||||
//fprintf(stderr, "erl_errno_id(%d) = %s db_strerror = %s\n", rc, error, db_strerror(rc));
|
|
||||||
if (NULL != error && strcmp("unknown", error) != 0)
|
if (NULL != error && strcmp("unknown", error) != 0)
|
||||||
{
|
{
|
||||||
return error;
|
return error;
|
||||||
|
@ -1369,7 +1352,7 @@ void bdberl_send_rc(ErlDrvPort port, ErlDrvTermData pid, int rc)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// See if this is a standard errno that we have an erlang code for
|
// See if this is a standard errno that we have an erlang code for
|
||||||
char *error = bdberl_bdberl_rc_to_atom_str(rc);
|
char *error = bdberl_rc_to_atom_str(rc);
|
||||||
if (NULL != error)
|
if (NULL != error)
|
||||||
{
|
{
|
||||||
ErlDrvTermData response[] = { ERL_DRV_ATOM, driver_mk_atom("error"),
|
ErlDrvTermData response[] = { ERL_DRV_ATOM, driver_mk_atom("error"),
|
||||||
|
@ -1432,7 +1415,7 @@ static void async_cleanup_and_send_kv(PortData* d, int rc, DBT* key, DBT* value)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// See if this is a standard errno that we have an erlang code for
|
// See if this is a standard errno that we have an erlang code for
|
||||||
char *error = bdberl_bdberl_rc_to_atom_str(rc);
|
char *error = bdberl_rc_to_atom_str(rc);
|
||||||
if (NULL != error)
|
if (NULL != error)
|
||||||
{
|
{
|
||||||
ErlDrvTermData response[] = { ERL_DRV_ATOM, driver_mk_atom("error"),
|
ErlDrvTermData response[] = { ERL_DRV_ATOM, driver_mk_atom("error"),
|
||||||
|
@ -1490,7 +1473,7 @@ static void do_async_put(void* arg)
|
||||||
{
|
{
|
||||||
// Execute the actual put. All databases are opened with AUTO_COMMIT, so if msg->port->txn
|
// Execute the actual put. All databases are opened with AUTO_COMMIT, so if msg->port->txn
|
||||||
// is NULL, the put will still be atomic
|
// is NULL, the put will still be atomic
|
||||||
DBGCMD(d, "db->put(%p, %p, %p, &p, %08X) key=%p(%d) value=%p(%d)",
|
DBGCMD(d, "db->put(%p, %p, %p, %p, %08X) key=%p(%d) value=%p(%d)",
|
||||||
db, d->txn, &key, &value, flags, key.data, key.size, value.data, value.size);
|
db, d->txn, &key, &value, flags, key.data, key.size, value.data, value.size);
|
||||||
rc = db->put(db, d->txn, &key, &value, flags);
|
rc = db->put(db, d->txn, &key, &value, flags);
|
||||||
DBGCMDRC(d, rc);
|
DBGCMDRC(d, rc);
|
||||||
|
@ -1599,7 +1582,7 @@ static void do_async_txnop(void* arg)
|
||||||
{
|
{
|
||||||
DBGCMD(d, "G_DB_ENV->txn_begin(%p, 0, %p, %08X)", G_DB_ENV, d->txn, d->async_flags);
|
DBGCMD(d, "G_DB_ENV->txn_begin(%p, 0, %p, %08X)", G_DB_ENV, d->txn, d->async_flags);
|
||||||
rc = G_DB_ENV->txn_begin(G_DB_ENV, 0, &(d->txn), d->async_flags);
|
rc = G_DB_ENV->txn_begin(G_DB_ENV, 0, &(d->txn), d->async_flags);
|
||||||
DBGCMD(d, "rc = %s (%d) d->txn = %p", rc == 0 ? "ok" : bdberl_bdberl_rc_to_atom_str(rc), rc, d->txn);
|
DBGCMD(d, "rc = %s (%d) d->txn = %p", rc == 0 ? "ok" : bdberl_rc_to_atom_str(rc), rc, d->txn);
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (d->async_op == CMD_TXN_COMMIT)
|
else if (d->async_op == CMD_TXN_COMMIT)
|
||||||
|
@ -1645,7 +1628,7 @@ static void do_async_cursor_get(void* arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Execute the operation
|
// Execute the operation
|
||||||
DBGCMD(d, "d->cursor->get(%p, &key, &value, flags);");
|
DBGCMD(d, "d->cursor->get(%p, %p, %p, %08X);", d->cursor, &key, &value, flags);
|
||||||
int rc = d->cursor->get(d->cursor, &key, &value, flags);
|
int rc = d->cursor->get(d->cursor, &key, &value, flags);
|
||||||
DBGCMDRC(d, rc);
|
DBGCMDRC(d, rc);
|
||||||
|
|
||||||
|
@ -1698,10 +1681,10 @@ static void do_async_truncate(void* arg)
|
||||||
DB* db = database->db;
|
DB* db = database->db;
|
||||||
u_int32_t count = 0;
|
u_int32_t count = 0;
|
||||||
|
|
||||||
DBGCMD(d, "db->truncate(%p, %p, %p) dbref=%d", db, d->txn, &count, 0, i);
|
DBGCMD(d, "db->truncate(%p, %p, %p, 0) dbref=%d", db, d->txn, &count, i);
|
||||||
rc = db->truncate(db, d->txn, &count, 0);
|
rc = db->truncate(db, d->txn, &count, 0);
|
||||||
DBGCMD(d, "rc = %s (%d) count=%d",
|
DBGCMD(d, "rc = %s (%d) count=%d",
|
||||||
rc == 0 ? "ok" : bdberl_bdberl_rc_to_atom_str(rc), rc, count);
|
rc == 0 ? "ok" : bdberl_rc_to_atom_str(rc), rc, count);
|
||||||
|
|
||||||
if (rc != 0)
|
if (rc != 0)
|
||||||
{
|
{
|
||||||
|
@ -1716,7 +1699,7 @@ static void do_async_truncate(void* arg)
|
||||||
u_int32_t count = 0;
|
u_int32_t count = 0;
|
||||||
DBGCMD(d, "db->truncate(%p, %p, %p, 0) dbref=%d", db, d->txn, &count, d->async_dbref);
|
DBGCMD(d, "db->truncate(%p, %p, %p, 0) dbref=%d", db, d->txn, &count, d->async_dbref);
|
||||||
rc = db->truncate(db, d->txn, &count, 0);
|
rc = db->truncate(db, d->txn, &count, 0);
|
||||||
DBGCMD(d, "rc = %s (%d) count=%d", rc == 0 ? "ok" : bdberl_bdberl_rc_to_atom_str(rc),
|
DBGCMD(d, "rc = %s (%d) count=%d", rc == 0 ? "ok" : bdberl_rc_to_atom_str(rc),
|
||||||
rc, count);
|
rc, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2155,4 +2138,23 @@ static void send_log_message(ErlDrvTermData* msg, int elements)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
#if 1
|
||||||
|
static void DBGCMD(PortData *d, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
char buf[1024];
|
||||||
|
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, fmt);
|
||||||
|
vsnprintf(buf, sizeof(buf), fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
(void)fprintf(stderr, "threadid %p port %p: %s\r\n", erl_drv_thread_self(), d->port, buf);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
static void DBGCMDRC(PortData *d, int rc)
|
||||||
|
{
|
||||||
|
(void)fprintf(stderr, "threadid %p port %p: rc = %s (%d)\r\n",
|
||||||
|
erl_drv_thread_self(), d->port, rc == 0 ? "ok" : bdberl_rc_to_atom_str(rc), rc);
|
||||||
|
}
|
||||||
|
#endif // DEBUG
|
||||||
|
|
Loading…
Reference in a new issue