From 4a3c1ef2acf5e3a573a6b22f7f799cf34b13c3f3 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Tue, 10 Oct 2017 14:52:47 -0600 Subject: [PATCH] Update TODO list --- TODO | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/TODO b/TODO index 3c3d0fd052..4e7bf8526d 100644 --- a/TODO +++ b/TODO @@ -22,10 +22,10 @@ nuttx/: (16) Network (net/, drivers/net) (4) USB (drivers/usbdev, drivers/usbhost) (0) Other drivers (drivers/) - (13) Libraries (libc/, libm/) + (14) Libraries (libc/, libm/) (10) File system/Generic drivers (fs/, drivers/) (10) Graphics Subsystem (graphics/) - (2) Build system / Toolchains + (3) Build system / Toolchains (3) Linux/Cywgin simulation (arch/sim) (4) ARM (arch/arm/) @@ -1740,6 +1740,52 @@ o Libraries (libc/, libm/) Status: Open Priority: Low + Title: printf()/flush() Cancellation Point Problems + Description: printf() calls flush() which, in turn calls write(). write() + is a cancellation point and both print() and flush() are + permitted to be cancellation points according to + OpenGroup.org. + + However, calling write(), albeit indirectly from printf() + does not make it a "well behaved" cancellation point. When + write() exists, then the task or thread may be terminated + and printf() will leave the library semeaphore locked, + causing hang for the next task that calls printf(). + + There are basically three problems here. Resolution of + any of these problems: + + 1. It is optional if printf is a cancellation point. Because + it calls write() (indirectly), it is essentially a + cancellation point. But it could be possible to generate + a special interface, say nx_write() that behaves like + write() but is not a cancellation point. This function + would have to be accessible from user space for the + PROTECTED and KERNEL build. + + 2. pthreads maintain of list of all mutexes that they hold. + These are handling according to OpenGroup.org when the + pthread exits holding the mutex. There is nothing + comparable for tasks and semaphores, there is no list of + semaphores held for each tasks or pthreads and there is + no logic to deal with semaphores held when the task or + pthread exits. + + 3. NuttX supports nested cancellation points: A function + that is a cancellation point can call another function + that is also a cancellation point. The cancellation will + not occur until the final nested cancellation point + exits. So in the case of printf, if it were to be a + cancellation point, then the actual action exit would not + occur until printf() frees all semaphores and exits. + Unfortunately, printf() is a user space interface and the + cancellation interfaces are internal to the OS and would + not be available to printf() in the PROTECTED or KERNEL + build modes. + Status: Open + Priority: Medium-high. Anything that can result in a hang is + automatically pretty high priority. + o File system / Generic drivers (fs/, drivers/) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -2161,6 +2207,12 @@ o Build system to all Makefiles. It has not yet been confirmed that this fix eliminates the dependency issue or not. + Title: DEPENDENCIES OBJECT SUB-DIRECTORIES + Descripton: Dependencies do not work in directories that keep binaries in + a sub-directory like bin, ubin, kbin. + Status: Open + Priority: Medium-Low. Definitely a build issue once in awhile. + o Other drivers (drivers/) ^^^^^^^^^^^^^^^^^^^^^^^^