Licensing Information
Open Source Used In Cisco FXOS 1.1(3) 878
hash_size, tdb.map_size);
#endif
tdb_brlock(&tdb, GLOBAL_LOCK, LOCK_CLEAR, F_WRLCK, F_SETLKW);
return ret;
fail:
if (tdb.name) free(tdb.name);
if (tdb.fd != -1) close(tdb.fd);
if (tdb.map_ptr) munmap(tdb.map_ptr, tdb.map_size);
return NULL;
}
/* close a database */
int tdb_close(TDB_CONTEXT *tdb)
{
if (!tdb) return -1;
if (tdb->name) free(tdb->name);
if (tdb->fd != -1) close(tdb->fd);
if (tdb->locked) free(tdb->locked);
if (tdb->map_ptr) {
if (tdb->fd != -1) {
munmap(tdb->map_ptr, tdb->map_size);
} else {
free(tdb->map_ptr);
}
}
memset(tdb, 0, sizeof(*tdb));
free(tdb);
return 0;
}
/* lock the database. If we already have it locked then don't do anything */
int tdb_writelock(TDB_CONTEXT *tdb)
{
if (tdb == NULL) {
#ifdef TDB_DEBUG
printf("tdb_writelock() called with null context\n");
#endif
return -1;
}
return tdb_lock(tdb, -1);