23
23
#import < os/lock.h>
24
24
25
25
#import " MTRLogging_Internal.h"
26
+ #import " MTRUnfairLock.h"
27
+
26
28
#import < Matter/MTRAsyncCallbackWorkQueue.h>
27
29
28
30
#pragma mark - Class extensions
@@ -72,14 +74,10 @@ - (instancetype)initWithContext:(id)context queue:(dispatch_queue_t)queue
72
74
73
75
- (NSString *)description
74
76
{
75
- os_unfair_lock_lock (& _lock);
77
+ std::lock_guard lock ( _lock);
76
78
77
- auto * desc = [NSString
79
+ return [NSString
78
80
stringWithFormat: @" MTRAsyncCallbackWorkQueue context: %@ items count: %lu " , self .context, (unsigned long ) self .items.count];
79
-
80
- os_unfair_lock_unlock (&_lock);
81
-
82
- return desc;
83
81
}
84
82
85
83
- (void )enqueueWorkItem : (MTRAsyncCallbackQueueWorkItem *)item
@@ -91,12 +89,11 @@ - (void)enqueueWorkItem:(MTRAsyncCallbackQueueWorkItem *)item
91
89
92
90
[item markEnqueued ];
93
91
94
- os_unfair_lock_lock (& _lock);
92
+ std::lock_guard lock ( _lock);
95
93
item.workQueue = self;
96
94
[self .items addObject: item];
97
95
98
96
[self _callNextReadyWorkItem ];
99
- os_unfair_lock_unlock (&_lock);
100
97
}
101
98
102
99
- (void )invalidate
@@ -115,11 +112,10 @@ - (void)invalidate
115
112
// called after executing a work item
116
113
- (void )_postProcessWorkItem : (MTRAsyncCallbackQueueWorkItem *)workItem retry : (BOOL )retry
117
114
{
118
- os_unfair_lock_lock (& _lock);
115
+ std::lock_guard lock ( _lock);
119
116
// sanity check if running
120
117
if (!self.runningWorkItemCount ) {
121
118
// something is wrong with state - nothing is currently running
122
- os_unfair_lock_unlock (&_lock);
123
119
MTR_LOG_ERROR (" MTRAsyncCallbackWorkQueue endWork: no work is running on work queue" );
124
120
return ;
125
121
}
@@ -129,7 +125,6 @@ - (void)_postProcessWorkItem:(MTRAsyncCallbackQueueWorkItem *)workItem retry:(BO
129
125
MTRAsyncCallbackQueueWorkItem * firstWorkItem = self.items .firstObject ;
130
126
if (firstWorkItem != workItem) {
131
127
// something is wrong with this work item - should not be currently running
132
- os_unfair_lock_unlock (&_lock);
133
128
MTR_LOG_ERROR (" MTRAsyncCallbackWorkQueue endWork: work item is not first on work queue" );
134
129
return ;
135
130
}
@@ -142,7 +137,6 @@ - (void)_postProcessWorkItem:(MTRAsyncCallbackQueueWorkItem *)workItem retry:(BO
142
137
// when "concurrency width" is implemented this will be decremented instead
143
138
self.runningWorkItemCount = 0 ;
144
139
[self _callNextReadyWorkItem ];
145
- os_unfair_lock_unlock (&_lock);
146
140
}
147
141
148
142
- (void )endWork : (MTRAsyncCallbackQueueWorkItem *)workItem
@@ -203,34 +197,30 @@ - (void)_invalidate
203
197
204
198
- (void )invalidate
205
199
{
206
- os_unfair_lock_lock (& _lock);
200
+ std::lock_guard lock ( _lock);
207
201
[self _invalidate ];
208
- os_unfair_lock_unlock (&_lock);
209
202
}
210
203
211
204
- (void )markEnqueued
212
205
{
213
- os_unfair_lock_lock (& _lock);
206
+ std::lock_guard lock ( _lock);
214
207
_enqueued = YES ;
215
- os_unfair_lock_unlock (&_lock);
216
208
}
217
209
218
210
- (void )setReadyHandler : (MTRAsyncCallbackReadyHandler)readyHandler
219
211
{
220
- os_unfair_lock_lock (& _lock);
212
+ std::lock_guard lock ( _lock);
221
213
if (!_enqueued) {
222
214
_readyHandler = readyHandler;
223
215
}
224
- os_unfair_lock_unlock (&_lock);
225
216
}
226
217
227
218
- (void )setCancelHandler : (dispatch_block_t )cancelHandler
228
219
{
229
- os_unfair_lock_lock (& _lock);
220
+ std::lock_guard lock ( _lock);
230
221
if (!_enqueued) {
231
222
_cancelHandler = cancelHandler;
232
223
}
233
- os_unfair_lock_unlock (&_lock);
234
224
}
235
225
236
226
- (void )endWork
0 commit comments