I did some further modifications to vms_tdb.c/tdb.h, available at http://www.er6.eng.ohio-state.edu/~jonesd/samba/vms_tdb.zip.
Changes: - Increase the maximum record size to 2036 bytes. - Fixed a bug in the TDB_INTERNAL mode operation (only the [.locking]posix.c module appears to use an 'internal' tdb. - Save the last key as well as the last hash in the TDB_CONTEXT structure. The optimization in fetch() now checks the last key is the same as well as the last hash. - The TDB_DATA items returned by the external functions now point to dynamically allocated copies of the data rather have the dptr field point to internal data buffers. The main samba code assumes the dptr field contains an address returned by malloc() and can free() or realloc it. - Redid the CLEAR_IF_FIRST handling, the initialization logic is now: Generate resource name (SMBTDB_'fname'). if CLEAR_IF_FIRST then lock resource with CR (concurrent read) mode lock. convert lock to PW (protected write) mode lock with NOQUEUE flag. if conversion succeeds then zero the database. end convert lock to PR (protected read) mode. else lock resource with PR (protected read) mode lock. end The idea is that the first person can get the PW mode lock because there is no contention. Subsequent users will fail to get the PW mode lock and then the conversion to PR mode will force them to wait until the guy with the PW lock completes the file initialization (and lowers his lock to PR mode. Passing through CR mode is probably superflous. -------------------------------------------------------------------------- David L. Jones | Phone: (614) 292-6929 Ohio State University | Internet: 140 W. 19th St. Rm. 231a | [EMAIL PROTECTED] Columbus, OH 43210 | [EMAIL PROTECTED] Disclaimer: I'm looking for marbles all day long. PLEASE READ THIS IMPORTANT ETIQUETTE MESSAGE BEFORE POSTING: http://www.catb.org/~esr/faqs/smart-questions.html