summaryrefslogtreecommitdiff
path: root/nuttx/lib/stdlib/lib_abort.c
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-04-04 00:41:28 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-04-04 00:41:28 +0000
commit0645255a9610a4e0d8470923b3bb7c31eee1cf6e (patch)
treee9712dda9a695f8dd6fb3eb1f4da0ef897eeda6d /nuttx/lib/stdlib/lib_abort.c
parent5a4b42ee5eca5123836beda8a7f3e18f95c472dc (diff)
downloadpx4-nuttx-0645255a9610a4e0d8470923b3bb7c31eee1cf6e.tar.gz
px4-nuttx-0645255a9610a4e0d8470923b3bb7c31eee1cf6e.tar.bz2
px4-nuttx-0645255a9610a4e0d8470923b3bb7c31eee1cf6e.zip
Updates to STM32 OTG FS device driver
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4553 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/lib/stdlib/lib_abort.c')
-rw-r--r--nuttx/lib/stdlib/lib_abort.c56
1 files changed, 48 insertions, 8 deletions
diff --git a/nuttx/lib/stdlib/lib_abort.c b/nuttx/lib/stdlib/lib_abort.c
index 6a47e6ea4..84b600950 100644
--- a/nuttx/lib/stdlib/lib_abort.c
+++ b/nuttx/lib/stdlib/lib_abort.c
@@ -1,8 +1,8 @@
/************************************************************************
- * lib/stdlib/abort.c
+ * lib/stdlib/lib_abort.c
*
- * Copyright (C) 2007, 2009, 2011 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ * Copyright (C) 2007, 2009, 2011-2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -37,10 +37,13 @@
* Included Files
************************************************************************/
+#include <nuttx/config.h>
+
#include <stdlib.h>
+#include <pthread.h>
/************************************************************************
- * Definitions
+ * Pre-processor Definitions
************************************************************************/
/************************************************************************
@@ -60,7 +63,7 @@
************************************************************************/
/************************************************************************
- * Private Functionss
+ * Private Functions
************************************************************************/
/************************************************************************
@@ -68,14 +71,51 @@
************************************************************************/
/************************************************************************
- * Function: abort
+ * Name: Abort
*
* Description:
- * The abort() function causes abnormal program termination.
- * All open streams are closed and flushed.
+ * The abort() first unblocks the SIGABRT signal, and then raises that
+ * signal for the calling process. This results in the abnormal
+ * termination of the process unless the SIGABRT signal is caught and
+ * the signal handler does not return.
+ *
+ * If the abort() function causes process termination, all open
+ * streams are closed and flushed.
+ *
+ * If the SIGABRT signal is ignored, or caught by a handler that
+ * returns, the abort() function will still terminate the process.
+ * It does this by restoring the default disposition for SIGABRT and
+ * then raising the signal for a second time.
+ *
+ * Input parameters:
+ * None
+ *
+ * Returned Value:
+ * This function does not return,
+ *
************************************************************************/
void abort(void)
{
+ /* NuttX does not support standard signal functionality (like the
+ * behavior of the SIGABRT signal). So no attempt is made to provide
+ * a conformant version of abort() at this time. This version does not
+ * signal the calling thread all.
+ *
+ * Note that pthread_exit() is called instead of exit(). That is because
+ * we do no know if abort was called from a pthread or a normal thread
+ * (we could find out, of course). If abort() is called from a non-pthread,
+ * then pthread_exit() should fail and fall back to call exit() anyway.
+ *
+ * If exit() is called (either below or via pthread_exit()), then exit()
+ * will flush and close all open files and terminate the thread. If this
+ * function was called from a pthread, then pthread_exit() will complete
+ * any joins, but will not flush or close any streams.
+ */
+
+#ifdef CONFIG_DISABLE_PTHREAD
exit(EXIT_FAILURE);
+#else
+ pthread_exit(NULL);
+#endif
}