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);
|
MBED_ASSERT(_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mutex::lock(void)
|
osStatus Mutex::lock(void)
|
||||||
{
|
{
|
||||||
osStatus status = osMutexAcquire(_id, osWaitForever);
|
osStatus status = osMutexAcquire(_id, osWaitForever);
|
||||||
if (osOK == status) {
|
if (osOK == status) {
|
||||||
_count++;
|
_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)
|
osStatus Mutex::lock(uint32_t millisec)
|
||||||
|
@ -68,9 +72,13 @@ osStatus Mutex::lock(uint32_t millisec)
|
||||||
_count++;
|
_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
MBED_ASSERT(status == osOK ||
|
bool success = (status == osOK ||
|
||||||
(status == osErrorResource && millisec == 0) ||
|
(status == osErrorResource && millisec == 0) ||
|
||||||
(status == osErrorTimeout && millisec != osWaitForever));
|
(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;
|
return status;
|
||||||
}
|
}
|
||||||
|
@ -87,9 +95,13 @@ bool Mutex::trylock_for(uint32_t millisec)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
MBED_ASSERT(status == osOK ||
|
bool success = (status == osOK ||
|
||||||
(status == osErrorResource && millisec == 0) ||
|
(status == osErrorResource && millisec == 0) ||
|
||||||
(status == osErrorTimeout && millisec != osWaitForever));
|
(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;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -108,13 +120,17 @@ bool Mutex::trylock_until(uint64_t millisec)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mutex::unlock()
|
osStatus Mutex::unlock()
|
||||||
{
|
{
|
||||||
_count--;
|
_count--;
|
||||||
|
|
||||||
osStatus status = osMutexRelease(_id);
|
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()
|
osThreadId Mutex::get_owner()
|
||||||
|
|
23
rtos/Mutex.h
23
rtos/Mutex.h
|
@ -74,7 +74,6 @@ public:
|
||||||
/** Create and Initialize a Mutex object
|
/** 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.
|
@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.
|
@note You cannot call this function from ISR context.
|
||||||
*/
|
*/
|
||||||
Mutex(const char *name);
|
Mutex(const char *name);
|
||||||
|
@ -82,26 +81,31 @@ public:
|
||||||
/**
|
/**
|
||||||
Wait until a Mutex becomes available.
|
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 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.
|
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.
|
Wait until a Mutex becomes available.
|
||||||
@param millisec timeout value or 0 in case of no time-out.
|
@param millisec timeout value or 0 in case of no time-out.
|
||||||
@return status code that indicates the execution status of the function:
|
@return status code that indicates the execution status of the function:
|
||||||
@a osOK the mutex has been obtained.
|
@a osOK the mutex has been obtained.
|
||||||
@a osErrorTimeout the mutex could not be obtained in the given time.
|
@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 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 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);
|
osStatus lock(uint32_t millisec);
|
||||||
|
|
||||||
/** Try to lock the mutex, and return immediately
|
/** 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
|
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 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
|
/** Get the owner the this mutex
|
||||||
@return the current owner of this mutex.
|
@return the current owner of this mutex.
|
||||||
|
|
Loading…
Reference in New Issue