mirror of
https://github.com/openmv/openmv.git
synced 2025-09-26 23:09:13 +08:00
Merge pull request #2850 from openmv/fix_mutex_unlock
Some checks are pending
🔎 Check Code Formatting / formatting-check (push) Waiting to run
🔥 Firmware Build / build-firmware (0, ARDUINO_GIGA) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, ARDUINO_NANO_33_BLE_SENSE) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, ARDUINO_NANO_RP2040_CONNECT) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, ARDUINO_NICLA_VISION) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, ARDUINO_PORTENTA_H7) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, DOCKER) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMV2) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMV3) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMV4) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMV4P) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMVPT) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMV_AE3) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMV_N6) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMV_RT1060) (push) Waiting to run
🔥 Firmware Build / build-firmware (1, OPENMV_N6) (push) Waiting to run
🔥 Firmware Build / code-size-report (push) Blocked by required conditions
🔥 Firmware Build / stable-release (push) Blocked by required conditions
🔥 Firmware Build / development-release (push) Blocked by required conditions
Some checks are pending
🔎 Check Code Formatting / formatting-check (push) Waiting to run
🔥 Firmware Build / build-firmware (0, ARDUINO_GIGA) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, ARDUINO_NANO_33_BLE_SENSE) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, ARDUINO_NANO_RP2040_CONNECT) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, ARDUINO_NICLA_VISION) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, ARDUINO_PORTENTA_H7) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, DOCKER) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMV2) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMV3) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMV4) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMV4P) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMVPT) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMV_AE3) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMV_N6) (push) Waiting to run
🔥 Firmware Build / build-firmware (0, OPENMV_RT1060) (push) Waiting to run
🔥 Firmware Build / build-firmware (1, OPENMV_N6) (push) Waiting to run
🔥 Firmware Build / code-size-report (push) Blocked by required conditions
🔥 Firmware Build / stable-release (push) Blocked by required conditions
🔥 Firmware Build / development-release (push) Blocked by required conditions
common/mutex: Return true, if unlocked.
This commit is contained in:
commit
a19d832f1e
@ -31,7 +31,9 @@ void mutex_init0(mutex_t *m) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void mutex_lock(mutex_t *m, size_t tid) {
|
void mutex_lock(mutex_t *m, size_t tid) {
|
||||||
while (atomic_flag_test_and_set_explicit(&m->lock, memory_order_acquire));
|
while (atomic_flag_test_and_set_explicit(&m->lock, memory_order_acquire)) {
|
||||||
|
|
||||||
|
}
|
||||||
atomic_store_explicit(&m->tid, tid, memory_order_release);
|
atomic_store_explicit(&m->tid, tid, memory_order_release);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,8 +55,10 @@ bool mutex_try_lock_fair(mutex_t *m, size_t tid) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mutex_unlock(mutex_t *m, size_t tid) {
|
bool mutex_unlock(mutex_t *m, size_t tid) {
|
||||||
if (atomic_load_explicit(&m->tid, memory_order_acquire) == tid) {
|
if (atomic_load_explicit(&m->tid, memory_order_acquire) == tid) {
|
||||||
atomic_flag_clear_explicit(&m->lock, memory_order_release);
|
atomic_flag_clear_explicit(&m->lock, memory_order_release);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -48,5 +48,5 @@ void mutex_lock(mutex_t *mutex, size_t tid);
|
|||||||
bool mutex_try_lock(mutex_t *mutex, size_t tid);
|
bool mutex_try_lock(mutex_t *mutex, size_t tid);
|
||||||
// Prevents a thread from locking twice in a row.
|
// Prevents a thread from locking twice in a row.
|
||||||
bool mutex_try_lock_fair(mutex_t *mutex, size_t tid);
|
bool mutex_try_lock_fair(mutex_t *mutex, size_t tid);
|
||||||
void mutex_unlock(mutex_t *mutex, size_t tid);
|
bool mutex_unlock(mutex_t *mutex, size_t tid);
|
||||||
#endif // __MUTEX_H__
|
#endif // __MUTEX_H__
|
||||||
|
Loading…
Reference in New Issue
Block a user