ObjFW  Check-in [1cdf56dc9e]

Overview
Comment:of_memory_barrier -> OFMemoryBarrier
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | new-naming-convention
Files: files | file ages | folders
SHA3-256: 1cdf56dc9e5f4b001b2509d8717f8c8270dcc6226b02db46d10ee309c315257a
User & Date: js on 2021-04-18 23:41:04
Other Links: branch diff | manifest | tags
Context
2021-04-19
20:50
Fix a few forgotten of_forward check-in: b886536090 user: js tags: new-naming-convention
2021-04-18
23:41
of_memory_barrier -> OFMemoryBarrier check-in: 1cdf56dc9e user: js tags: new-naming-convention
23:36
A few more renames for consistency check-in: bd7addd9e8 user: js tags: new-naming-convention
Changes

Modified src/OFAtomic_builtins.h from [faa8445463] to [100821f588].

128
129
130
131
132
133
134
135

136
137
138
139
140
141

142
143
144
145
146
147

148
149
150
128
129
130
131
132
133
134

135
136
137
138
139
140

141
142
143
144
145
146

147
148
149
150







-
+





-
+





-
+



    void *_Nullable o, void *_Nullable n)
{
	return __atomic_compare_exchange(p, &o, &n, false,
	    __ATOMIC_RELAXED, __ATOMIC_RELAXED);
}

static OF_INLINE void
of_memory_barrier_full(void)
OFMemoryBarrier(void)
{
	__atomic_thread_fence(__ATOMIC_SEQ_CST);
}

static OF_INLINE void
of_memory_barrier_acquire(void)
OFAcquireMemoryBarrier(void)
{
	__atomic_thread_fence(__ATOMIC_ACQUIRE);
}

static OF_INLINE void
of_memory_barrier_release(void)
OFReleaseMemoryBarrier(void)
{
	__atomic_thread_fence(__ATOMIC_RELEASE);
}

Modified src/OFAtomic_no_threads.h from [6020e5ba6e] to [428a9e720d].

140
141
142
143
144
145
146
147

148
149
150
151
152
153

154
155
156
157
158
159

160
161
162
140
141
142
143
144
145
146

147
148
149
150
151
152

153
154
155
156
157
158

159
160
161
162







-
+





-
+





-
+



		return true;
	}

	return false;
}

static OF_INLINE void
of_memory_barrier(void)
OFMemoryBarrier(void)
{
	/* nop */
}

static OF_INLINE void
of_memory_barrier_acquire(void)
OFAcquireMemoryBarrier(void)
{
	/* nop */
}

static OF_INLINE void
of_memory_barrier_release(void)
OFReleaseMemoryBarrier(void)
{
	/* nop */
}

Modified src/OFAtomic_osatomic.h from [9f3398c71a] to [52d5cd31b9].

135
136
137
138
139
140
141
142

143
144
145
146
147
148

149
150
151
152
153
154

155
156
157
135
136
137
138
139
140
141

142
143
144
145
146
147

148
149
150
151
152
153

154
155
156
157







-
+





-
+





-
+



OFAtomicPointerCompareAndSwap(void *volatile _Nullable *_Nonnull p,
    void *_Nullable o, void *_Nullable n)
{
	return OSAtomicCompareAndSwapPtr(o, n, p);
}

static OF_INLINE void
of_memory_barrier(void)
OFMemoryBarrier(void)
{
	OSMemoryBarrier();
}

static OF_INLINE void
of_memory_barrier_acquire(void)
OFAcquireMemoryBarrier(void)
{
	OSMemoryBarrier();
}

static OF_INLINE void
of_memory_barrier_release(void)
OFReleaseMemoryBarrier(void)
{
	OSMemoryBarrier();
}

Modified src/OFAtomic_powerpc.h from [fb429fc6e7] to [b84702cb04].

369
370
371
372
373
374
375
376

377
378
379
380
381
382
383
384

385
386
387
388
389
390
391
392

393
394
395
396
397
369
370
371
372
373
374
375

376
377
378
379
380
381
382
383

384
385
386
387
388
389
390
391

392
393
394
395
396
397







-
+







-
+







-
+





	    : "cc", "memory"
	);

	return r;
}

static OF_INLINE void
of_memory_barrier(void)
OFMemoryBarrier(void)
{
	__asm__ __volatile__ (
	    ".long 0x7C2004AC /* lwsync */" ::: "memory"
	);
}

static OF_INLINE void
of_memory_barrier_acquire(void)
OFAcquireMemoryBarrier(void)
{
	__asm__ __volatile__ (
	    ".long 0x7C2004AC /* lwsync */" ::: "memory"
	);
}

static OF_INLINE void
of_memory_barrier_release(void)
OFReleaseMemoryBarrier(void)
{
	__asm__ __volatile__ (
	    ".long 0x7C2004AC /* lwsync */" ::: "memory"
	);
}

Modified src/OFAtomic_sync_builtins.h from [ca7c72a3e0] to [cebe486547].

125
126
127
128
129
130
131
132

133
134
135
136
137
138

139
140
141
142
143
144

145
146
147
125
126
127
128
129
130
131

132
133
134
135
136
137

138
139
140
141
142
143

144
145
146
147







-
+





-
+





-
+



OFAtomicPointerCompareAndSwap(void *volatile _Nullable *_Nonnull p,
    void *_Nullable o, void *_Nullable n)
{
	return __sync_bool_compare_and_swap(p, o, n);
}

static OF_INLINE void
of_memory_barrier(void)
OFMemoryBarrier(void)
{
	__sync_synchronize();
}

static OF_INLINE void
of_memory_barrier_acquire(void)
OFAcquireMemoryBarrier(void)
{
	__sync_synchronize();
}

static OF_INLINE void
of_memory_barrier_release(void)
OFReleaseMemoryBarrier(void)
{
	__sync_synchronize();
}

Modified src/OFAtomic_x86.h from [7a6e063b7c] to [b0f56d0157].

476
477
478
479
480
481
482
483

484
485
486
487
488
489
490
491

492
493
494
495
496
497

498
499
500
501
502
476
477
478
479
480
481
482

483
484
485
486
487
488
489
490

491
492
493
494
495
496

497
498
499
500
501
502







-
+







-
+





-
+





	    : "cc"
	);

	return r;
}

static OF_INLINE void
of_memory_barrier(void)
OFMemoryBarrier(void)
{
	__asm__ __volatile__ (
	    "mfence" ::: "memory"
	);
}

static OF_INLINE void
of_memory_barrier_acquire(void)
OFAcquireMemoryBarrier(void)
{
	__asm__ __volatile__ ("" ::: "memory");
}

static OF_INLINE void
of_memory_barrier_release(void)
OFReleaseMemoryBarrier(void)
{
	__asm__ __volatile__ ("" ::: "memory");
}

OF_ASSUME_NONNULL_END

Modified src/OFObject.m from [2194068b85] to [eafb73f421].

1132
1133
1134
1135
1136
1137
1138
1139

1140
1141
1142

1143
1144
1145
1146
1147
1148
1149
1132
1133
1134
1135
1136
1137
1138

1139
1140
1141

1142
1143
1144
1145
1146
1147
1148
1149







-
+


-
+







	assert(PRE_IVARS->retainCount >= 0);
	return PRE_IVARS->retainCount;
}

- (void)release
{
#if defined(OF_HAVE_ATOMIC_OPS)
	of_memory_barrier_release();
	OFReleaseMemoryBarrier();

	if (OFAtomicIntDecrease(&PRE_IVARS->retainCount) <= 0) {
		of_memory_barrier_acquire();
		OFAcquireMemoryBarrier();

		[self dealloc];
	}
#elif defined(OF_AMIGAOS)
	int retainCount;

	Forbid();

Modified src/OFOnce.m from [7b34c9bf7f] to [ac90a9eaf1].

41
42
43
44
45
46
47
48

49
50
51
52
53
54
55
41
42
43
44
45
46
47

48
49
50
51
52
53
54
55







-
+







	/* Avoid atomic operations in case it's already done. */
	if (*control == 2)
		return;

	if (OFAtomicIntCompareAndSwap(control, 0, 1)) {
		func();

		of_memory_barrier();
		OFMemoryBarrier();

		OFAtomicIntIncrease(control);
	} else
		while (*control == 1)
			OFYieldThread();
#elif defined(OF_AMIGAOS)
	bool run = false;

Modified src/OFPlainMutex.h from [182f54ad45] to [f2be57e77e].

105
106
107
108
109
110
111
112

113
114
115
116
117
118
119
105
106
107
108
109
110
111

112
113
114
115
116
117
118
119







-
+







}

static OF_INLINE int
OFSpinlockTryLock(OFSpinlock *spinlock)
{
#if defined(OF_HAVE_ATOMIC_OPS)
	if (OFAtomicIntCompareAndSwap(spinlock, 0, 1)) {
		of_memory_barrier_acquire();
		OFAcquireMemoryBarrier();
		return 0;
	}

	return EBUSY;
#elif defined(OF_HAVE_PTHREAD_SPINLOCKS)
	return pthread_spin_trylock(spinlock);
#else
144
145
146
147
148
149
150
151

152
153
154
155
156
157
158
144
145
146
147
148
149
150

151
152
153
154
155
156
157
158







-
+








static OF_INLINE int
OFSpinlockUnlock(OFSpinlock *spinlock)
{
#if defined(OF_HAVE_ATOMIC_OPS)
	bool ret = OFAtomicIntCompareAndSwap(spinlock, 1, 0);

	of_memory_barrier_release();
	OFReleaseMemoryBarrier();

	return (ret ? 0 : EINVAL);
#elif defined(OF_HAVE_PTHREAD_SPINLOCKS)
	return pthread_spin_unlock(spinlock);
#else
	return OFPlainMutexUnlock(spinlock);
#endif