xiaoxiang781216 commented on code in PR #16030:
URL: https://github.com/apache/nuttx/pull/16030#discussion_r2014926704


##########
libs/libc/semaphore/sem_wait.c:
##########
@@ -98,3 +98,43 @@ int sem_wait(FAR sem_t *sem)
   leave_cancellation_point();
   return ERROR;
 }
+
+/****************************************************************************
+ * Name: nxsem_wait
+ *
+ * Description:
+ *   This function attempts to lock the semaphore referenced by 'sem'.  If
+ *   the semaphore value is (<=) zero, then the calling task will not return
+ *   until it successfully acquires the lock.
+ *
+ *   This is an internal OS interface.  It is functionally equivalent to
+ *   sem_wait except that:
+ *
+ *   - It is not a cancellation point, and
+ *   - It does not modify the errno value.
+ *
+ * Input Parameters:
+ *   sem - Semaphore descriptor.
+ *
+ * Returned Value:
+ *   This is an internal OS interface and should not be used by applications.
+ *   It follows the NuttX internal error return policy:  Zero (OK) is
+ *   returned on success.  A negated errno value is returned on failure.
+ *   Possible returned errors:
+ *
+ *   - EINVAL:  Invalid attempt to get the semaphore
+ *   - EINTR:   The wait was interrupted by the receipt of a signal.
+ *
+ ****************************************************************************/
+
+#if !defined(CONFIG_BUILD_FLAT) && !defined(__KERNEL__)
+int nxsem_wait(FAR sem_t *sem)

Review Comment:
   
   > > > * libc and kernel neede different "decorations" - kernel requires 
DEBUGASSERTs and libc should (IMHO) check if sem != NULL. Putting these into 
inilne functions would make it messy (would require ifdef **KERNEL** etc..)
   > > 
   > > 
   > > DEBUGASSERT can be called in userspace too, why do you need add 
`__KERNEL__`? sem_xxx could check sem != NULL before invoking nxsem_xxx, 
nxsem_xxx could DEBUGASSERT before invoking nsem_xxx_slow.
   > 
   > Yes, but why? You still need two c-files, so why not keep just the common 
code in the current "inline" and leave the libc specifics in libc c-file and 
kernel specifics in kernel c-file.
   > 
   
   You don't need two c-files. nxsem_xxx is a normal function now, but call 
nxsem_xxx_slow kernel function, so you can put nxsem_xxx and sem_xxx into the 
same libc source file, and change nxsem_xxx_impl to static function, or let's 
sem_xxx call nxsem_xxx directly and let compiler optimize them.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to