nuttx/sched/pthread
chao an b9b615b425 sched/pthread: fix race condition on pthread_cond_wait()
pthread_cond_wait() should be an atomic operation in the mutex lock/unlock.
Since the sched_lock() has been wrongly deleted in the previous commit,
the context switch will occurred after the mutex was unlocked:

--------------------------------------------------------------------
  Task1(Priority 100)             |      Task2(Priority 101)
                                  |
  pthread_mutex_lock(mutex);      |
  |                               |
  pthread_cond_wait(cond, mutex)  |
  |  |                            |
  |  |                            |
  |  ->enter_critical_section()   |
  |  ->pthread_mutex_give(mutex)  | ----> pthread_mutex_lock(mutex);    // contex switch to high priority task
  |                               |       pthread_cond_signal(cond);    // signal before wait
  |                               | <---- pthread_mutex_unlock(mutex);  // switch back to original task
  |  ->pthread_sem_take(cond->sem)|                                     // try to wait the signal, Deadlock.
  |  ->leave_critical_section()   |
  |
  |  ->pthread_mutex_take(mutex)  |
  |                               |
  pthread_mutex_lock(mutex);      |
---------------------------------------------------------------------

This PR will bring back sched_lock()/sched_unlock() to avoid context switch to ensure atomicity

Signed-off-by: chao an <anchao@xiaomi.com>
2023-06-28 02:25:05 +08:00
..
Make.defs system: pthread_barrierwait should be moved to kernel space 2023-04-25 15:34:40 +08:00
pthread_barrierwait.c system: pthread_barrierwait should be moved to kernel space 2023-04-25 15:34:40 +08:00
pthread_cancel.c sched/tls: remove PTHREAD_CLEANUP from Kconfig 2023-06-14 12:00:48 +08:00
pthread_completejoin.c sched/pthread: Return ESRCH when the task is in the process of exit. 2023-06-15 10:12:25 -03:00
pthread_condbroadcast.c sched: Remove the unnecessary (FAR sem_t *) cast 2022-10-29 21:12:40 +02:00
pthread_condclockwait.c signal: remove unused SIGCONDTIMEDOUT 2023-03-23 17:17:25 -06:00
pthread_condsignal.c sched: Remove the unnecessary (FAR sem_t *) cast 2022-10-29 21:12:40 +02:00
pthread_condwait.c sched/pthread: fix race condition on pthread_cond_wait() 2023-06-28 02:25:05 +08:00
pthread_create.c addrenv/kstack: Allocate the kernel stack before initializing tcb 2023-06-09 13:53:27 +08:00
pthread_detach.c sched/pthread: Return ESRCH when the task is in the process of exit. 2023-06-15 10:12:25 -03:00
pthread_exit.c Increase the number of real time signals. Two is not enough. 2023-03-27 16:59:04 +03:00
pthread_findjoininfo.c sched/pthread: Return ESRCH when the task is in the process of exit. 2023-06-15 10:12:25 -03:00
pthread_getaffinity.c
pthread_getschedparam.c sched: Remove "0x" prefix preceding "%p" specifier on format string 2022-06-30 22:08:58 +03:00
pthread_initialize.c Remove intr param from pthread_sem_take 2022-12-08 03:13:44 +08:00
pthread_join.c sched/pthread: Return ESRCH when the task is in the process of exit. 2023-06-15 10:12:25 -03:00
pthread_mutex.c Remove intr param from pthread_mutex_take 2022-12-08 03:13:44 +08:00
pthread_mutexconsistent.c sched: Remove the unnecessary (FAR sem_t *) cast 2022-10-29 21:12:40 +02:00
pthread_mutexdestroy.c sched: Remove the unnecessary (FAR sem_t *) cast 2022-10-29 21:12:40 +02:00
pthread_mutexinconsistent.c
pthread_mutexinit.c sched: Remove the unnecessary (FAR sem_t *) cast 2022-10-29 21:12:40 +02:00
pthread_mutextimedlock.c sched/pthread: repalce sched_lock to enter_critical_section 2023-04-24 01:54:44 +08:00
pthread_mutextrylock.c sched/getpid: replace syscall getpid/tid/ppid() to kernel version 2023-02-02 10:33:01 +08:00
pthread_mutexunlock.c pthread: sched_lock should replace with enter_critical_secion 2023-05-06 23:12:20 +08:00
pthread_release.c Replace nxsem API when used as a lock with nxmutex API 2022-10-17 15:59:46 +09:00
pthread_setaffinity.c
pthread_setschedparam.c sched: Remove "0x" prefix preceding "%p" specifier on format string 2022-06-30 22:08:58 +03:00
pthread_setschedprio.c
pthread_sigmask.c
pthread.h sched/pthread: Return ESRCH when the task is in the process of exit. 2023-06-15 10:12:25 -03:00