pussuw commented on code in PR #6197:
URL: https://github.com/apache/incubator-nuttx/pull/6197#discussion_r870681574


##########
libs/libc/stdlib/lib_atexit.c:
##########
@@ -0,0 +1,148 @@
+/****************************************************************************
+ * libs/libc/stdlib/lib_atexit.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 <sched.h>
+#include <stdlib.h>
+
+#include <sys/atexit.h>
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static struct atexit_list_s g_atexit_head;
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: atexit
+ *
+ * Description:
+ *    Registers a function to be called at program exit.
+ *    The atexit() function registers the given function to be called
+ *    at normal process termination, whether via exit or via return from
+ *    the program's main().
+ *
+ *    Limitations in the current implementation:
+ *
+ *      1. Only a single atexit function can be registered unless
+ *         CONFIG_LIBC_MAX_EXITFUNS defines a larger number.
+ *      2. atexit functions are not inherited when a new task is
+ *         created.
+ *
+ * Input Parameters:
+ *   func - A pointer to the function to be called when the task exits.
+ *
+ * Returned Value:
+ *   Zero on success. Non-zero on failure.
+ *
+ ****************************************************************************/
+
+int atexit(CODE void (*func)(void))
+{
+  return __atexit_register(ATTYPE_ATEXIT, func, NULL, NULL);
+}
+
+int __atexit_register(int type, CODE void (*func)(void), FAR void *arg,
+                      FAR void *dso)
+{
+  FAR struct atexit_list_s *aehead;
+  int                       idx;
+  int                       ret = ERROR;
+
+  /* REVISIT: Missing logic */
+
+  UNUSED(dso);
+
+  /* The following must be atomic */
+
+  aehead = &g_atexit_head;
+
+  if (func)
+    {
+      sched_lock();

Review Comment:
   Yes, I'll make a more abstract / generic "Libc lock" for this or something. 
It can use ta_sem



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