@@ -82,6 +82,13 @@ static bool nxmutex_is_reset(FAR mutex_t *mutex)
82
82
83
83
int nxmutex_init (FAR mutex_t * mutex )
84
84
{
85
+ #ifdef _LIGHT_MUTEX_
86
+ dq_init (mutex -> waitlist );
87
+ mutex -> htcb = NULL ;
88
+ mutex -> holder = NXMUTEX_NO_HOLDER ;
89
+
90
+ return OK ;
91
+ #else
85
92
int ret = _SEM_INIT (& mutex -> sem , 0 , 1 );
86
93
87
94
if (ret < 0 )
@@ -96,6 +103,7 @@ int nxmutex_init(FAR mutex_t *mutex)
96
103
_SEM_SETPROTOCOL (& mutex -> sem , SEM_TYPE_MUTEX );
97
104
#endif
98
105
return ret ;
106
+ #endif
99
107
}
100
108
101
109
/****************************************************************************
@@ -119,6 +127,14 @@ int nxmutex_init(FAR mutex_t *mutex)
119
127
120
128
int nxmutex_destroy (FAR mutex_t * mutex )
121
129
{
130
+ #ifdef _LIGHT_MUTEX_
131
+
132
+ dq_init (mutex -> waitlist );
133
+ mutex -> htcb = NULL ;
134
+ mutex -> holder = NXMUTEX_NO_HOLDER ;
135
+
136
+ return OK ;
137
+ #else
122
138
int ret = _SEM_DESTROY (& mutex -> sem );
123
139
124
140
if (ret < 0 )
@@ -128,6 +144,7 @@ int nxmutex_destroy(FAR mutex_t *mutex)
128
144
129
145
mutex -> holder = NXMUTEX_NO_HOLDER ;
130
146
return ret ;
147
+ #endif
131
148
}
132
149
133
150
/****************************************************************************
@@ -164,12 +181,17 @@ bool nxmutex_is_hold(FAR mutex_t *mutex)
164
181
165
182
bool nxmutex_is_locked (FAR mutex_t * mutex )
166
183
{
184
+
185
+ #ifdef _LIGHT_MUTEX_
186
+ return mutex -> htcb != NULL ;
187
+ #else
167
188
int cnt ;
168
189
int ret ;
169
190
170
191
ret = _SEM_GETVALUE (& mutex -> sem , & cnt );
171
192
172
193
return ret >= 0 && cnt < 1 ;
194
+ #endif
173
195
}
174
196
175
197
/****************************************************************************
@@ -194,6 +216,27 @@ bool nxmutex_is_locked(FAR mutex_t *mutex)
194
216
195
217
int nxmutex_lock (FAR mutex_t * mutex )
196
218
{
219
+ #ifdef _LIGHT_MUTEX_
220
+ irqstate_t flag ;
221
+
222
+ DEBUGASSERT (mutex != NULL && !up_interrupt_context ());
223
+
224
+ flag = spinlock_irqsave (& mutex_spinlock );
225
+
226
+ if (mutex -> holder == NULL )
227
+ {
228
+
229
+ }
230
+ else
231
+ {
232
+
233
+ }
234
+
235
+ spinclock_irqrestore (NULL , mutex_spinlock );
236
+
237
+ return OK ;
238
+
239
+ #else
197
240
int ret ;
198
241
199
242
DEBUGASSERT (!nxmutex_is_hold (mutex ));
@@ -214,6 +257,7 @@ int nxmutex_lock(FAR mutex_t *mutex)
214
257
}
215
258
216
259
return ret ;
260
+ #endif
217
261
}
218
262
219
263
/****************************************************************************
@@ -329,6 +373,21 @@ int nxmutex_timedlock(FAR mutex_t *mutex, unsigned int timeout)
329
373
330
374
int nxmutex_unlock (FAR mutex_t * mutex )
331
375
{
376
+ #ifdef _LIGHT_MUTEX_
377
+ int ret ;
378
+
379
+ if (nxmutex_is_reset (mutex ))
380
+ {
381
+ return OK ;
382
+ }
383
+
384
+ DEBUGASSERT (nxmutex_is_hold (mutex ));
385
+ mutex -> htcb
386
+ mutex -> holder = NXMUTEX_NO_HOLDER ;
387
+
388
+
389
+ return OK ;
390
+ #else
332
391
int ret ;
333
392
334
393
if (nxmutex_is_reset (mutex ))
@@ -348,6 +407,7 @@ int nxmutex_unlock(FAR mutex_t *mutex)
348
407
}
349
408
350
409
return ret ;
410
+ #endif
351
411
}
352
412
353
413
/****************************************************************************
0 commit comments