diff --git a/src/xpdev/dirwrap.h b/src/xpdev/dirwrap.h
index c3c4e9f578a0ca24b7076e6b7e8f557f7e4779f0..b7a8be094c2441854800c8538e7a2f1f0422ab59 100644
--- a/src/xpdev/dirwrap.h
+++ b/src/xpdev/dirwrap.h
@@ -61,8 +61,9 @@ extern "C" {
 	#include <glob.h>		/* POSIX.2 directory pattern matching function */
 	#define MKDIR(dir)		mkdir(dir,0777)
 
-	#if defined(__OpenBSD__) && defined(_THREADWRAP_H)
-		/* realpath() not threadsafe on OpenBSD */
+	#if defined(BSD) && defined(_THREADWRAP_H)
+		/* realpath() not threadsafe on OpenBSD -or- FreeBSD */
+		/* (On FreeBSD it only fails in release builds!		 */
 	    #define FULLPATH(a,r,l) realpath_r(r,a)	/* defined in threadwrap.c */
 	#else
 		#define FULLPATH(a,r,l)	realpath(r,a)
diff --git a/src/xpdev/threadwrap.c b/src/xpdev/threadwrap.c
index 7f8f41fff9d26ec7b1b88c475b0c20f9301fc75a..d43b33acac3045171e175b46b04855dac881f6d2 100644
--- a/src/xpdev/threadwrap.c
+++ b/src/xpdev/threadwrap.c
@@ -84,8 +84,9 @@ ulong _beginthread(void( *start_address )( void * )
 
 /****************************************************************************/
 /* Thread-safe (reentrant) version of realpath() - required for OpenBSD		*/
+/* And for NON-DEBUG FreeBSD builds (on 4.7 anyways)						*/
 /****************************************************************************/
-#if defined(__OpenBSD__)
+#if defined(BSD)
 char* realpath_r(const char *pathname, char *resolvedname)  
 {
     static pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
diff --git a/src/xpdev/threadwrap.h b/src/xpdev/threadwrap.h
index a72f5b0cbc65b6eb0347fa27e7e4bb12cfb483f1..a98c9f0809be60e1656aae8a54d644881e502492 100644
--- a/src/xpdev/threadwrap.h
+++ b/src/xpdev/threadwrap.h
@@ -56,7 +56,7 @@ extern "C" {
 	ulong _beginthread(void( *start_address )( void * )
 		,unsigned stack_size, void *arglist);
 
-	#if defined(__OpenBSD__)	/* thread-safe version of realpath for OpenBSD */
+	#if defined(BSD)	/* thread-safe version of realpath for BSD */
 		char* realpath_r(const char *pathname, char *resolvedname);
 	#endif