This patch sets errno to EINVAL when sem argument is NULL in sem_post()
and sem_wait().
All credits should go to Paul A. Patience who wrote the original commit.
Change-Id: If51df37aefac2f1802f14e7c293d040e4c8d593b
Signed-off-by: Gregory Nutt <gnutt@nuttx.org>
Signed-off-by: Paul A. Patience <paul-a.patience@polymtl.ca>
[Song: backported
891113da from NuttX]
Signed-off-by: EunBong Song <eunb.song@samsung.com>
#include <limits.h>
#include <semaphore.h>
+#include <errno.h>
#include <sched.h>
#include <tinyara/arch.h>
/* Interrupts may now be enabled. */
irqrestore(saved_state);
+ } else {
+ set_errno(EINVAL);
}
return ret;
/* Interrupts may now be enabled. */
irqrestore(saved_state);
+ } else {
+ set_errno(EINVAL);
}
return ret;
DEBUGASSERT(sem != NULL && up_interrupt_context() == false);
- /* Assume any errors reported are due to invalid arguments. */
- set_errno(EINVAL);
-
/* The following operations must be performed with interrupts
* disabled because sem_post() may be called from an interrupt
* handler.
}
/* Make sure we were supplied with a valid semaphore */
- if (sem != NULL) {
+ if (sem != NULL) {
/* Check if the lock is available */
sched_unlock();
#endif
}
+ } else {
+ set_errno(EINVAL);
}
leave_cancellation_point();