Posix: add '#pragma GCC poison exit'

Generally exit() should not be used on Posix, because it exits the whole
program instead of only the task.
This commit is contained in:
Beat Küng 2018-08-31 13:28:28 +02:00
parent 9193312bd0
commit 4e6139d9fb
7 changed files with 20 additions and 7 deletions

View File

@ -330,7 +330,7 @@ Client::_sig_handler(int sig_num)
if (_client_send_pipe_fd < 0) {
PX4_ERR("pipe open fail");
exit(-1);
system_exit(-1);
}
int bytes_to_send = get_client_send_packet_length(&packet);
@ -338,7 +338,7 @@ Client::_sig_handler(int sig_num)
if (bytes_sent != bytes_to_send) {
PX4_ERR("write fail");
exit(-1);
system_exit(-1);
}
}

View File

@ -115,7 +115,7 @@ void
px4_systemreset(bool to_bootloader)
{
PX4_WARN("Called px4_system_reset");
exit(0);
system_exit(0);
}
px4_task_t px4_task_spawn_cmd(const char *name, int scheduler, int priority, int stack_size, px4_main_t entry,

View File

@ -59,6 +59,18 @@
# define __END_DECLS
#endif
/* exit() is used on NuttX to exit a task. However on Posix, it will exit the
* whole application, so we prevent its use there. There are cases where it
* still needs to be used, thus we remap system_exit to exit.
*/
#define system_exit exit
#ifdef __PX4_POSIX
#include <stdlib.h>
#ifdef __cplusplus
#include <cstdlib>
#endif
#pragma GCC poison exit
#endif
#ifdef __PX4_NUTTX
/* On NuttX we call clearenv() so we cannot use getenv() and others (see px4_task_spawn_cmd() in px4_nuttx_tasks.c).

@ -1 +1 @@
Subproject commit 3bdfdf3db201d19dc243a1a1f1f3f85b55d08212
Subproject commit b439556d54aa53532586e69de87cc720af4543c2

View File

@ -87,7 +87,7 @@ public:
void task_main();
void exit() { _force_task_exit = true; }
void exit_task() { _force_task_exit = true; }
private:
void publish_led_control(led_control_s &led_control);

View File

@ -39,7 +39,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <string.h> /* memset, etc */
#include <stdlib.h> /* exit */
#define oom() exit(-1)
// FIXME: this needs to be checked: we need to handle OOM properly instead of just exiting
#define oom() system_exit(-1)
typedef void (ctor_f)(void *dst, const void *src);
typedef void (dtor_f)(void *elt);

View File

@ -48,7 +48,7 @@ void list_builtins(apps_map_type &apps)
int shutdown_main(int argc, char *argv[])
{
printf("Shutting down\n");
exit(0);
system_exit(0);
}
int list_tasks_main(int argc, char *argv[])