mirror of https://github.com/ARMmbed/mbed-os.git
Address review comments.
Perform the following changes: - change definition of `void Mutex::lock(void)` to `osStatus Mutex::lock(void)`. - change definition of `void Mutex::unlock()` to `osStatus Mutex::unlock()`. - use MBED_ERROR1 macro to check the lock/unlock operation status. - add notes in the description of lock/unlock functions: "This function asserts status of the lock/unlock operation (will not return in case of failure). Use of the return value is deprecated, as the return is expected to become void in the future.". - modify/add description of the return value. - remove reference to Mbed 6. - make `lock(millisec)` deprecated in favour of lock(), trylock() and trylock_for() functions.pull/7423/head
parent
ac2db7cc06
commit
fba9c4bc57
|
@ -51,14 +51,18 @@ void Mutex::constructor(const char *name)
|
|||
MBED_ASSERT(_id);
|
||||
}
|
||||
|
||||
void Mutex::lock(void)
|
||||
osStatus Mutex::lock(void)
|
||||
{
|
||||
osStatus status = osMutexAcquire(_id, osWaitForever);
|
||||
if (osOK == status) {
|
||||
_count++;
|
||||
}
|
||||
|
||||
MBED_ASSERT(status == osOK);
|
||||
if (status != osOK) {
|
||||
MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_KERNEL, MBED_ERROR_CODE_MUTEX_LOCK_FAILED), "Mutex lock failed", status);
|
||||
}
|
||||
|
||||
return osOK;
|
||||
}
|
||||
|
||||
osStatus Mutex::lock(uint32_t millisec)
|
||||
|
@ -68,9 +72,13 @@ osStatus Mutex::lock(uint32_t millisec)
|
|||
_count++;
|
||||
}
|
||||
|
||||
MBED_ASSERT(status == osOK ||
|
||||
(status == osErrorResource && millisec == 0) ||
|
||||
(status == osErrorTimeout && millisec != osWaitForever));
|
||||
bool success = (status == osOK ||
|
||||
(status == osErrorResource && millisec == 0) ||
|
||||
(status == osErrorTimeout && millisec != osWaitForever));
|
||||
|
||||
if (!success) {
|
||||
MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_KERNEL, MBED_ERROR_CODE_MUTEX_LOCK_FAILED), "Mutex lock failed", status);
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@ -87,9 +95,13 @@ bool Mutex::trylock_for(uint32_t millisec)
|
|||
return true;
|
||||
}
|
||||
|
||||
MBED_ASSERT(status == osOK ||
|
||||
(status == osErrorResource && millisec == 0) ||
|
||||
(status == osErrorTimeout && millisec != osWaitForever));
|
||||
bool success = (status == osOK ||
|
||||
(status == osErrorResource && millisec == 0) ||
|
||||
(status == osErrorTimeout && millisec != osWaitForever));
|
||||
|
||||
if (!success) {
|
||||
MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_KERNEL, MBED_ERROR_CODE_MUTEX_LOCK_FAILED), "Mutex lock failed", status);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -108,13 +120,17 @@ bool Mutex::trylock_until(uint64_t millisec)
|
|||
}
|
||||
}
|
||||
|
||||
void Mutex::unlock()
|
||||
osStatus Mutex::unlock()
|
||||
{
|
||||
_count--;
|
||||
|
||||
osStatus status = osMutexRelease(_id);
|
||||
|
||||
MBED_ASSERT(status == osOK);
|
||||
if (status != osOK) {
|
||||
MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_KERNEL, MBED_ERROR_CODE_MUTEX_UNLOCK_FAILED), "Mutex unlock failed", status);
|
||||
}
|
||||
|
||||
return osOK;
|
||||
}
|
||||
|
||||
osThreadId Mutex::get_owner()
|
||||
|
|
23
rtos/Mutex.h
23
rtos/Mutex.h
|
@ -74,7 +74,6 @@ public:
|
|||
/** Create and Initialize a Mutex object
|
||||
|
||||
@param name name to be used for this mutex. It has to stay allocated for the lifetime of the thread.
|
||||
|
||||
@note You cannot call this function from ISR context.
|
||||
*/
|
||||
Mutex(const char *name);
|
||||
|
@ -82,26 +81,31 @@ public:
|
|||
/**
|
||||
Wait until a Mutex becomes available.
|
||||
|
||||
@return status code that indicates the execution status of the function:
|
||||
@a osOK the mutex has been obtained.
|
||||
|
||||
@note You cannot call this function from ISR context.
|
||||
@note This function treats RTOS errors as fatal system errors, so can only return osOK.
|
||||
Use of the return value is deprecated, as the return is expected to become void in the future.
|
||||
*/
|
||||
void lock(void);
|
||||
osStatus lock(void);
|
||||
|
||||
/**
|
||||
For backwards compatibility.
|
||||
@deprecated Do not use this function. This function has been replaced with trylock_for and lock(void) functions.
|
||||
@deprecated Do not use this function. This function has been replaced with lock(), trylock() and trylock_for() functions.
|
||||
|
||||
Wait until a Mutex becomes available.
|
||||
@param millisec timeout value or 0 in case of no time-out.
|
||||
@return status code that indicates the execution status of the function:
|
||||
@a osOK the mutex has been obtained.
|
||||
@a osErrorTimeout the mutex could not be obtained in the given time.
|
||||
@a osErrorParameter internal error.
|
||||
@a osErrorResource the mutex could not be obtained when no timeout was specified.
|
||||
@a osErrorISR this function cannot be called from the interrupt service routine.
|
||||
|
||||
@note You cannot call this function from ISR context.
|
||||
@note This function treats RTOS errors as fatal system errors, so can only return osOK or
|
||||
osErrorResource in case when millisec is 0 or osErrorTimeout if millisec is not osWaitForever.
|
||||
*/
|
||||
MBED_DEPRECATED_SINCE("mbed-os-5.10.0", "Replaced with trylock_for and lock(void) functions")
|
||||
MBED_DEPRECATED_SINCE("mbed-os-5.10.0", "Replaced with lock(), trylock() and trylock_for() functions")
|
||||
osStatus lock(uint32_t millisec);
|
||||
|
||||
/** Try to lock the mutex, and return immediately
|
||||
|
@ -139,9 +143,14 @@ public:
|
|||
/**
|
||||
Unlock the mutex that has previously been locked by the same thread
|
||||
|
||||
@return status code that indicates the execution status of the function:
|
||||
@a osOK the mutex has been released.
|
||||
|
||||
@note You cannot call this function from ISR context.
|
||||
@note This function treats RTOS errors as fatal system errors, so can only return osOK.
|
||||
Use of the return value is deprecated, as the return is expected to become void in the future.
|
||||
*/
|
||||
void unlock();
|
||||
osStatus unlock();
|
||||
|
||||
/** Get the owner the this mutex
|
||||
@return the current owner of this mutex.
|
||||
|
|
Loading…
Reference in New Issue