ObjFW  Check-in [f02b51feba]

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: f02b51feba390fd94e7f49f994d88ccd4ba7fb68984be4cd24f2cabd22b32aa7
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
32
33
34
35
36
37
38
39
40




41
42
43
44
45
46
47
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"
#ifdef OF_HAVE_THREADS
# import "OFMutex.h"
#endif
#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
73

74
75
76
77

78
79
80
81
82

83
84
85
86
87
88
89
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 OFMutex *mutex;
static of_mutex_t mutex;

OF_CONSTRUCTOR()
{
	mutex = [[OFMutex alloc] init];
	OF_ENSURE(of_mutex_new(&mutex) == 0);
}

OF_DESTRUCTOR()
{
	[mutex release];
	of_mutex_free(&mutex);
}
#endif

OFString *
of_strerror(int errNo)
{
	OFString *ret;
188
189
190
191
192
193
194


195

196
197
198
199
200
201
202
203


204
205
206
207
208
209
210
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];
	[mutex lock];

	@try {
# endif
		ret = [OFString
		    stringWithCString: strerror(errNo)
			     encoding: [OFLocale encoding]];
# ifdef OF_HAVE_THREADS
	} @finally {
		[mutex unlock];
		if (of_mutex_unlock(&mutex) != 0)
			@throw [OFUnlockFailedException exception];
	}
# endif
#endif

	return ret;
}