Overview
Comment: | Don't use OFMutex in constructors
It's possible OFMutex is not loaded yet. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
f02b51feba390fd94e7f49f994d88ccd |
User & Date: | js on 2020-12-21 02:34:09 |
Other Links: | manifest | tags |
Context
2020-12-21
| ||
19:42 | Make objc_error() more generic check-in: abe75c42dc user: js tags: trunk | |
02:34 | Don't use OFMutex in constructors check-in: f02b51feba user: js tags: trunk | |
02:22 | Further reduce usage of errno check-in: a208c510ff user: js tags: trunk | |
Changes
Modified src/exceptions/OFException.m from [c2351f2243] to [9ab19e4a0d].
︙ | ︙ | |||
25 26 27 28 29 30 31 | #ifdef HAVE_DLFCN_H # include <dlfcn.h> #endif #import "OFException.h" #import "OFArray.h" #import "OFLocale.h" | < < < > > > > | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #ifdef HAVE_DLFCN_H # include <dlfcn.h> #endif #import "OFException.h" #import "OFArray.h" #import "OFLocale.h" #import "OFString.h" #import "OFSystemInfo.h" #import "OFInitializationFailedException.h" #import "OFLockFailedException.h" #import "OFUnlockFailedException.h" #ifdef OF_HAVE_THREADS # import "mutex.h" #endif #if defined(OF_WINDOWS) && defined(OF_HAVE_SOCKETS) # include <winerror.h> #endif #if defined(OF_ARM) && !defined(__ARM_DWARF_EH__) # define HAVE_ARM_EHABI_EXCEPTIONS |
︙ | ︙ | |||
66 67 68 69 70 71 72 | extern uintptr_t _Unwind_GetIP(struct _Unwind_Context *); #else extern int _Unwind_VRS_Get(struct _Unwind_Context *, int, uint32_t, int, void *); #endif #if !defined(HAVE_STRERROR_R) && defined(OF_HAVE_THREADS) | | | | | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | extern uintptr_t _Unwind_GetIP(struct _Unwind_Context *); #else extern int _Unwind_VRS_Get(struct _Unwind_Context *, int, uint32_t, int, void *); #endif #if !defined(HAVE_STRERROR_R) && defined(OF_HAVE_THREADS) static of_mutex_t mutex; OF_CONSTRUCTOR() { OF_ENSURE(of_mutex_new(&mutex) == 0); } OF_DESTRUCTOR() { of_mutex_free(&mutex); } #endif OFString * of_strerror(int errNo) { OFString *ret; |
︙ | ︙ | |||
188 189 190 191 192 193 194 | if (strerror_r(errNo, buffer, 256) != 0) return @"Unknown error (strerror_r failed)"; ret = [OFString stringWithCString: buffer encoding: [OFLocale encoding]]; #else # ifdef OF_HAVE_THREADS | > > | | > | 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | if (strerror_r(errNo, buffer, 256) != 0) return @"Unknown error (strerror_r failed)"; ret = [OFString stringWithCString: buffer encoding: [OFLocale encoding]]; #else # ifdef OF_HAVE_THREADS if (of_mutex_lock(&mutex) != 0) @throw [OFLockFailedException exception]; @try { # endif ret = [OFString stringWithCString: strerror(errNo) encoding: [OFLocale encoding]]; # ifdef OF_HAVE_THREADS } @finally { if (of_mutex_unlock(&mutex) != 0) @throw [OFUnlockFailedException exception]; } # endif #endif return ret; } |
︙ | ︙ |