Yes, you are right. Perhaps this could be added to
https://github.com/apache/incubator-nuttx/issues/1352
That is a different issue description but might still be a good location
because both issues have the same solution. The solution to both issues
is to enhance the OS by adding a new OS facility to start a pthread from
within OS just as if pthread_create() were called from that application
task. That is not really that difficult. The SIGEV_THREAD logic would
then run on that pthread.
This same facility is also needed to correct the implementation of the
AIO APIs. They also should run on pthreads as well. However, I am not
aware of any functional shortcoming of the current AIO implementation
that would justify the change.
The only unattractive thing about this solution is that is does require
more resources and is less efficient in general.
Greg
On 1/26/2021 4:26 PM, Matias N. wrote:
Hi,
working with nimBLE I found that I had an issue when scheduling a callback to
be made from within the signal handler for a timer, which was set with
SIGEV_THREAD. The issue was that I was pushing to a POSIX queue from within the
handler, and it was failing with BADFD. From debugging I realized that when
trying to obtain the inode for the queue it was looking up at the open file
descriptors from the lpwork thread, which of course would not share open file
descriptors with main task.
Since this is working for Linux (I had copied this part of the porting layer
from Linux) my reasoning is that SIGEV_THREAD is there implemented as a thread
that is a child of the process which registered the signal handler and thus
shares the open file descriptors. In NuttX this is implemented via a work queue
so this is not the case.
Is my reading correct? If so, it may be worth adding this limitation to
https://github.com/apache/incubator-nuttx/issues/1352
Best,
Matias