diff --git a/src/xpdev/semwrap.c b/src/xpdev/semwrap.c
index a489162dd7d6fe196c04c9dbd6d7050eeda512f5..ff08651b7ecbfd463068e13753fda9044ec6e9df 100644
--- a/src/xpdev/semwrap.c
+++ b/src/xpdev/semwrap.c
@@ -96,8 +96,23 @@ int sem_post(sem_t* psem)
 
 int sem_getvalue(sem_t* psem, int* vp)
 {
+#if 0		/* This only works on 9x *sniff* */
 	ReleaseSemaphore(*(psem),0,(LPLONG)vp);
 	return 0;
+#else
+	/* Note, this should REALLY be in a critical section... */
+	int	retval=0;
+
+	if(WaitForSingleObject(*(psem),0)!=WAIT_OBJECT_0)
+		*vp=0;
+	else {
+		if(ReleaseSemaphore(*(psem),1,(LPLONG)vp))
+			(*vp)++;
+		else
+			retval=-1;
+	}
+	return(retval);
+#endif
 }
 
 int sem_destroy(sem_t* psem)