From 0ba6cd52596cfc7843d86d28e079099820b9a465 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Tue, 2 Apr 2002 13:41:11 +0000 Subject: [PATCH] Added warning about potential infinite recursion between setError and grabMutex. --- physfs_internal.h | 9 +++++++++ platform/skeleton.c | 4 +++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/physfs_internal.h b/physfs_internal.h index 31ebe93c..253b1872 100644 --- a/physfs_internal.h +++ b/physfs_internal.h @@ -262,6 +262,7 @@ typedef struct __PHYSFS_DIRFUNCTIONS__ #define ERR_TOO_MANY_SYMLINKS "Too many symbolic links" #define ERR_COMPRESSION "(De)compression error" #define ERR_NOT_IMPLEMENTED "Not implemented" +#define ERR_OS_ERROR "Operating system reported error" /* * Call this to set the message returned by PHYSFS_getLastError(). @@ -663,6 +664,10 @@ void __PHYSFS_platformDestroyMutex(void *mutex); * unrecoverable problem grabbing it (this should not be a matter of * timing out! We're talking major system errors; block until the mutex * is available otherwise.) + * + * _DO NOT_ call __PHYSFS_setError() in here! Since setError calls this + * function, you'll cause an infinite recursion. This means you can't + * use the BAIL_*MACRO* macros, either. */ int __PHYSFS_platformGrabMutex(void *mutex); @@ -671,6 +676,10 @@ int __PHYSFS_platformGrabMutex(void *mutex); * once for each time that platformGrabMutex was called. Once possession has * been released, the next thread in line to grab the mutex (if any) may * proceed. + * + * _DO NOT_ call __PHYSFS_setError() in here! Since setError calls this + * function, you'll cause an infinite recursion. This means you can't + * use the BAIL_*MACRO* macros, either. */ void __PHYSFS_platformReleaseMutex(void *mutex); diff --git a/platform/skeleton.c b/platform/skeleton.c index 7894d092..02312a47 100644 --- a/platform/skeleton.c +++ b/platform/skeleton.c @@ -207,12 +207,14 @@ void __PHYSFS_platformDestroyMutex(void *mutex) int __PHYSFS_platformGrabMutex(void *mutex) { - BAIL_MACRO(ERR_NOT_IMPLEMENTED, 0); + /* not implemented, but can't call __PHYSFS_setError! */ + return(0); } /* __PHYSFS_platformGrabMutex */ void __PHYSFS_platformReleaseMutex(void *mutex) { + /* not implemented, but can't call __PHYSFS_setError! */ } /* __PHYSFS_platformReleaseMutex */ /* end of skeleton.c ... */