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



##########
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 (provided that there are 4 or less parameters), but I am not certain it 
is safe for all architectures.  For example, architectures that pass all 
parameters on the stack.  In that case, the call stack would not be correct.  I 
think they have to be separate.  I think you need to retain atexit().




-- 
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