no1wudi commented on a change in pull request #3951:
URL: https://github.com/apache/incubator-nuttx/pull/3951#discussion_r655947540



##########
File path: libs/libc/sched/task_onexit.c
##########
@@ -0,0 +1,71 @@
+/****************************************************************************
+ * libs/libc/sched/task_onexit.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.  The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdlib.h>
+#include <assert.h>
+#include <unistd.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/sched.h>
+
+#ifdef CONFIG_SCHED_ATEXIT
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nxtask_atexit_proxy
+ *
+ * Description:
+ *    A wrapper function to call atexit callback in onexit.
+ *    Revist: Duplicated logic in user space syscall handler,
+ *    in some situation, this function is just a flag to check
+ *    wehter method should be choosen to execute atexit or onexit callback.
+ *
+ * Input Parameters:
+ *   exitcode - The exit status of task
+ *   arg      - The data pointer from user space
+ *
+ ****************************************************************************/
+
+static void nxtask_atexit_proxy(int exitcode, FAR void *arg)
+{
+  (*(atexitfunc_t)arg)();
+}
+
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+int atexit(void (*func)(void))
+{
+  return on_exit(nxtask_atexit_proxy, func);
+}

Review comment:
       > on_exit() and atexit() differ in the number of parameters. That is 
safe for ARM which passes parameters in registers (provided that there are 4 or 
less parameters), but I am not certain it is safe for all architectures. 
   
   I've checked the calling convention of Xtensa, or1k, and riscv, it's safe 
for 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.

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


Reply via email to