Berkeley DB Reference Guide: FreeBSD
Description: Berkeley DB: An embedded database programmatic toolkit.
Keywords: embedded,database,programmatic,toolkit,b+tree,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++

### Berkeley DB Reference Guide: Building Berkeley DB for UNIX/POSIX systems |

### FreeBSD

1. I can't compile and run multithreaded applications.

   Special compile-time flags are required when compiling threaded applications on FreeBSD. If you are compiling a threaded application, you must compile with the _THREAD_SAFE and -pthread flags:

   >     cc -D_THREAD_SAFE -pthread ...

   The Berkeley DB library will automatically build with the correct options.

2. I get occasional failures when running RPC-based programs under FreeBSD clients.

   There is a known bug in the XDR implementation in the FreeBSD C library from version 2.2 up to version 4.0-RELEASE, that causes certain-sized messages to fail and return a zero-filled reply to the client. A bug report (#16028) has been filed with FreeBSD. The following patch is the FreeBSD fix:

   >     *** /usr/src/lib/libc/xdr/xdr_rec.c.orig	Mon Jan 10 10:20:42 2000
   >     --- /usr/src/lib/libc/xdr/xdr_rec.c	Wed Jan 19 10:53:45 2000
   >     ***************
   >     *** 558,564 ****
   >       	 * but we don't have any way to be certain that they aren't
   >       	 * what the client actually intended to send us.
   >       	 */
   >     ! 	if ((header & (~LAST_FRAG)) == 0)
   >       		return(FALSE);
   >       	rstrm->fbtbc = header & (~LAST_FRAG);
   >       	return (TRUE);
   >     --- 558,564 ----
   >       	 * but we don't have any way to be certain that they aren't
   >       	 * what the client actually intended to send us.
   >       	 */
   >     ! 	if (header == 0)
   >       		return(FALSE);
   >       	rstrm->fbtbc = header & (~LAST_FRAG);
   >       	return (TRUE);

3. I see fsync and close system call failures when accessing databases or log files on NFS-mounted filesystems.

   Some FreeBSD releases are known to return ENOLCK from fsync and close calls on NFS-mounted filesystems, even though the call has succeeded. The Berkeley DB code should be modified to ignore ENOLCK errors, or no Berkeley DB files should be placed on NFS-mounted filesystems on these systems.

Copyright (c) 1996-2003 Sleepycat Software, Inc. - All rights reserved.