Skip to content

Commit 66096e1

Browse files
committed
signals: fix build and runtime issues when signals all isabled
Fix build and runtime issues when signals all disabled. Signed-off-by: Chengdong Wang <wangchengdong@lixiang.com>
1 parent 60d814e commit 66096e1

10 files changed

Lines changed: 156 additions & 30 deletions

File tree

examples/ipforward/ipforward.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,8 +542,16 @@ static FAR void *ipfwd_receiver(FAR void *arg)
542542
int errcode;
543543
int i;
544544

545+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
546+
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
547+
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
548+
#endif
549+
545550
for (i = 0; i < IPFWD_NPACKETS; i++)
546551
{
552+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
553+
pthread_testcancel();
554+
#endif
547555
nread = read(fwd->ia_fd, fwd->ia_buffer, IPFWD_BUFSIZE);
548556
if (nread < 0)
549557
{
@@ -840,7 +848,12 @@ int main(int argc, FAR char *argv[])
840848

841849
/* Wait for receiver thread to terminate */
842850

851+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
852+
pthread_cancel(fwd.if_receiver);
853+
#else
843854
pthread_kill(fwd.if_receiver, 9);
855+
#endif
856+
844857
ret = pthread_join(fwd.if_receiver, &value);
845858
if (ret != OK)
846859
{

examples/usrsocktest/usrsocktest_wake_with_signal.c

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,11 +146,20 @@ static void do_usrsock_blocking_socket_thread(FAR void *param)
146146
TEST_ASSERT_TRUE(test_hang);
147147
TEST_ASSERT_TRUE(test_abort);
148148

149+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
150+
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
151+
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
152+
#endif
153+
149154
/* Allow main thread to hang usrsock daemon at this point. */
150155

151156
sem_post(&tid_startsem);
152157
sem_wait(&tid_releasesem);
153158

159+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
160+
pthread_testcancel();
161+
#endif
162+
154163
/* Attempt hanging open socket. */
155164

156165
sem_post(&tid_startsem);
@@ -176,6 +185,11 @@ static void do_usrsock_blocking_close_thread(FAR void *param)
176185
TEST_ASSERT_TRUE(test_hang);
177186
TEST_ASSERT_TRUE(test_abort);
178187

188+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
189+
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
190+
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
191+
#endif
192+
179193
/* Open socket. */
180194

181195
test_sd[tidx] = socket(AF_INET, SOCK_STREAM, 0);
@@ -190,6 +204,10 @@ static void do_usrsock_blocking_close_thread(FAR void *param)
190204
sem_post(&tid_startsem);
191205
sem_wait(&tid_releasesem);
192206

207+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
208+
pthread_testcancel();
209+
#endif
210+
193211
/* Attempt hanging close socket. */
194212

195213
sem_post(&tid_startsem);
@@ -214,6 +232,11 @@ static void do_usrsock_blocking_connect_thread(FAR void *param)
214232

215233
TEST_ASSERT_TRUE(test_hang || !test_hang);
216234

235+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
236+
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
237+
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
238+
#endif
239+
217240
/* Open socket. */
218241

219242
test_sd[tidx] = socket(AF_INET, SOCK_STREAM, 0);
@@ -228,6 +251,10 @@ static void do_usrsock_blocking_connect_thread(FAR void *param)
228251
sem_post(&tid_startsem);
229252
sem_wait(&tid_releasesem);
230253

254+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
255+
pthread_testcancel();
256+
#endif
257+
231258
/* Attempt blocking connect. */
232259

233260
sem_post(&tid_startsem);
@@ -257,6 +284,11 @@ static void do_usrsock_blocking_setsockopt_thread(FAR void *param)
257284
bool test_abort = !!(test_flags & TEST_FLAG_DAEMON_ABORT);
258285
bool test_hang = !!(test_flags & TEST_FLAG_PAUSE_USRSOCK_HANDLING);
259286

287+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
288+
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
289+
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
290+
#endif
291+
260292
/* Open socket. */
261293

262294
test_sd[tidx] = socket(AF_INET, SOCK_STREAM, 0);
@@ -274,6 +306,10 @@ static void do_usrsock_blocking_setsockopt_thread(FAR void *param)
274306
sem_post(&tid_startsem);
275307
sem_wait(&tid_releasesem);
276308

309+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
310+
pthread_testcancel();
311+
#endif
312+
277313
/* Attempt hanging setsockopt. */
278314

279315
sem_post(&tid_startsem);
@@ -304,6 +340,11 @@ static void do_usrsock_blocking_getsockopt_thread(FAR void *param)
304340
bool test_abort = !!(test_flags & TEST_FLAG_DAEMON_ABORT);
305341
bool test_hang = !!(test_flags & TEST_FLAG_PAUSE_USRSOCK_HANDLING);
306342

343+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
344+
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
345+
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
346+
#endif
347+
307348
/* Open socket. */
308349

309350
test_sd[tidx] = socket(AF_INET, SOCK_STREAM, 0);
@@ -321,6 +362,10 @@ static void do_usrsock_blocking_getsockopt_thread(FAR void *param)
321362
sem_post(&tid_startsem);
322363
sem_wait(&tid_releasesem);
323364

365+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
366+
pthread_testcancel();
367+
#endif
368+
324369
/* Attempt hanging getsockopt. */
325370

326371
sem_post(&tid_startsem);
@@ -352,6 +397,11 @@ static void do_usrsock_blocking_send_thread(FAR void *param)
352397

353398
TEST_ASSERT_TRUE(test_hang || !test_hang);
354399

400+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
401+
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
402+
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
403+
#endif
404+
355405
/* Open socket. */
356406

357407
test_sd[tidx] = socket(AF_INET, SOCK_STREAM, 0);
@@ -372,6 +422,10 @@ static void do_usrsock_blocking_send_thread(FAR void *param)
372422
sem_post(&tid_startsem);
373423
sem_wait(&tid_releasesem);
374424

425+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
426+
pthread_testcancel();
427+
#endif
428+
375429
/* Attempt blocking send. */
376430

377431
sem_post(&tid_startsem);
@@ -401,6 +455,11 @@ static void do_usrsock_blocking_recv_thread(FAR void *param)
401455

402456
TEST_ASSERT_TRUE(test_hang || !test_hang);
403457

458+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
459+
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
460+
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
461+
#endif
462+
404463
/* Open socket. */
405464

406465
test_sd[tidx] = socket(AF_INET, SOCK_STREAM, 0);
@@ -421,6 +480,10 @@ static void do_usrsock_blocking_recv_thread(FAR void *param)
421480
sem_post(&tid_startsem);
422481
sem_wait(&tid_releasesem);
423482

483+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
484+
pthread_testcancel();
485+
#endif
486+
424487
/* Attempt blocking recv. */
425488

426489
sem_post(&tid_startsem);
@@ -454,6 +517,11 @@ static void do_usrsock_blocking_poll_thread(FAR void *param)
454517
TEST_ASSERT_TRUE(test_abort);
455518
TEST_ASSERT_TRUE(test_hang || !test_hang);
456519

520+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
521+
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
522+
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
523+
#endif
524+
457525
/* Open socket. */
458526

459527
test_sd[tidx] = socket(AF_INET, SOCK_STREAM, 0);
@@ -474,6 +542,10 @@ static void do_usrsock_blocking_poll_thread(FAR void *param)
474542
sem_post(&tid_startsem);
475543
sem_wait(&tid_releasesem);
476544

545+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
546+
pthread_testcancel();
547+
#endif
548+
477549
/* Attempt poll. */
478550

479551
pfd.fd = test_sd[tidx];
@@ -560,8 +632,11 @@ static void do_wake_test(enum e_test_type type, int flags)
560632

561633
for (tidx = 0; tidx < nthreads; tidx++)
562634
{
635+
#ifdef CONFIG_DISABLE_ALL_SIGNALS
636+
pthread_cancel(tid[tidx]);
637+
#else
563638
pthread_kill(tid[tidx], SIGUSR1);
564-
639+
#endif
565640
/* Wait threads to complete work. */
566641

567642
ret = pthread_join(tid[tidx], NULL);

nshlib/nsh.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1179,6 +1179,7 @@ int cmd_switchboot(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv);
11791179
int cmd_unset(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv);
11801180
#endif
11811181

1182+
#ifndef CONFIG_DISABLE_ALL_SIGNALS
11821183
#ifndef CONFIG_NSH_DISABLE_KILL
11831184
int cmd_kill(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv);
11841185
#endif
@@ -1191,6 +1192,7 @@ int cmd_switchboot(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv);
11911192
#ifndef CONFIG_NSH_DISABLE_USLEEP
11921193
int cmd_usleep(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv);
11931194
#endif
1195+
#endif /* !CONFIG_DISABLE_ALL_SIGNALS */
11941196

11951197
#ifndef CONFIG_NSH_DISABLE_UPTIME
11961198
int cmd_uptime(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv);

nshlib/nsh_command.c

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -304,14 +304,6 @@ static const struct cmdmap_s g_cmdmap[] =
304304
CMD_MAP("irqinfo", cmd_irqinfo, 1, 1, NULL),
305305
#endif
306306

307-
#ifndef CONFIG_NSH_DISABLE_KILL
308-
CMD_MAP("kill", cmd_kill, 2, 3, "[-<signal>] <pid>"),
309-
#endif
310-
311-
#if defined(CONFIG_FS_PROCFS) && !defined(CONFIG_NSH_DISABLE_PKILL)
312-
CMD_MAP("pkill", cmd_pkill, 2, 3, "[-<signal>] <name>"),
313-
#endif
314-
315307
#ifndef CONFIG_DISABLE_MOUNTPOINT
316308
# if defined(CONFIG_DEV_LOOP) && !defined(CONFIG_NSH_DISABLE_LOSETUP)
317309
CMD_MAP("losetup", cmd_losetup, 3, 6,
@@ -575,10 +567,24 @@ static const struct cmdmap_s g_cmdmap[] =
575567
#endif
576568
#endif
577569

570+
#ifndef CONFIG_DISABLE_ALL_SIGNALS
571+
#ifndef CONFIG_NSH_DISABLE_KILL
572+
CMD_MAP("kill", cmd_kill, 2, 3, "[-<signal>] <pid>"),
573+
#endif
574+
575+
#if defined(CONFIG_FS_PROCFS) && !defined(CONFIG_NSH_DISABLE_PKILL)
576+
CMD_MAP("pkill", cmd_pkill, 2, 3, "[-<signal>] <name>"),
577+
#endif
578+
578579
#ifndef CONFIG_NSH_DISABLE_SLEEP
579580
CMD_MAP("sleep", cmd_sleep, 2, 2, "<sec>"),
580581
#endif
581582

583+
#ifndef CONFIG_NSH_DISABLE_USLEEP
584+
CMD_MAP("usleep", cmd_usleep, 2, 2, "<usec>"),
585+
#endif
586+
#endif
587+
582588
#if !defined(CONFIG_NSH_DISABLESCRIPT) && !defined(CONFIG_NSH_DISABLE_SOURCE)
583589
CMD_MAP("source", cmd_source, 2, 2, "<script-path>"),
584590
#endif
@@ -657,10 +663,6 @@ static const struct cmdmap_s g_cmdmap[] =
657663
# endif
658664
#endif
659665

660-
#ifndef CONFIG_NSH_DISABLE_USLEEP
661-
CMD_MAP("usleep", cmd_usleep, 2, 2, "<usec>"),
662-
#endif
663-
664666
#ifndef CONFIG_NSH_DISABLE_WATCH
665667
CMD_MAP("watch", cmd_watch,
666668
2, 6, "[-n] interval [-c] count <command>"),

nshlib/nsh_proccmds.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -995,7 +995,8 @@ int cmd_pidof(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
995995
* Name: cmd_kill
996996
****************************************************************************/
997997

998-
#ifndef CONFIG_NSH_DISABLE_KILL
998+
#if !defined(CONFIG_NSH_DISABLE_KILL) && \
999+
!defined(CONFIG_DISABLE_ALL_SIGNALS)
9991000
int cmd_kill(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
10001001
{
10011002
FAR char *ptr;
@@ -1098,7 +1099,8 @@ int cmd_kill(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
10981099
* Name: cmd_pkill
10991100
****************************************************************************/
11001101

1101-
#if defined(CONFIG_FS_PROCFS) && !defined(CONFIG_NSH_DISABLE_PKILL)
1102+
#if defined(CONFIG_FS_PROCFS) && !defined(CONFIG_NSH_DISABLE_PKILL) && \
1103+
!defined(CONFIG_DISABLE_ALL_SIGNALS)
11021104
int cmd_pkill(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
11031105
{
11041106
FAR const char *name;
@@ -1199,7 +1201,8 @@ int cmd_pkill(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
11991201
* Name: cmd_sleep
12001202
****************************************************************************/
12011203

1202-
#ifndef CONFIG_NSH_DISABLE_SLEEP
1204+
#if !defined(CONFIG_NSH_DISABLE_SLEEP) && \
1205+
!defined(CONFIG_DISABLE_ALL_SIGNALS)
12031206
int cmd_sleep(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
12041207
{
12051208
UNUSED(argc);
@@ -1222,8 +1225,8 @@ int cmd_sleep(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
12221225
/****************************************************************************
12231226
* Name: cmd_usleep
12241227
****************************************************************************/
1225-
1226-
#ifndef CONFIG_NSH_DISABLE_USLEEP
1228+
#if !defined(CONFIG_NSH_DISABLE_USLEEP) && \
1229+
!defined(CONFIG_DISABLE_ALL_SIGNALS)
12271230
int cmd_usleep(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
12281231
{
12291232
UNUSED(argc);

system/sensortest/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#
2121
# ##############################################################################
2222

23-
if(CONFIG_SYSTEM_SENSORTEST)
23+
if(CONFIG_SYSTEM_SENSORTEST AND CONFIG_ENABLE_ALL_SIGNALS)
2424
nuttx_add_application(
2525
NAME
2626
${CONFIG_SYSTEM_SENSORTEST_PROGNAME}

system/sensortest/Make.defs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,7 @@
2121
############################################################################
2222

2323
ifneq ($(CONFIG_SYSTEM_SENSORTEST),)
24+
ifneq ($(CONFIG_ENABLE_ALL_SIGNALS),)
2425
CONFIGURED_APPS += $(APPDIR)/system/sensortest
2526
endif
27+
endif

testing/ostest/CMakeLists.txt

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,15 @@
2222

2323
if(CONFIG_TESTING_OSTEST)
2424

25-
set(SRCS
26-
getopt.c
27-
libc_memmem.c
28-
restart.c
29-
sigprocmask.c
30-
sighand.c
31-
signest.c
32-
sighelper.c)
25+
set(SRCS getopt.c libc_memmem.c restart.c sighelper.c)
26+
27+
if(CONFIG_ENABLE_ALL_SIGNALS)
28+
list(APPEND SRCS sighand.c signest.c)
29+
endif()
30+
31+
if(NOT CONFIG_DISABLE_ALL_SIGNALS)
32+
list(APPEND SRCS sigprocmask.c)
33+
endif()
3334

3435
if(CONFIG_DEV_NULL)
3536
list(APPEND SRCS dev_null.c)
@@ -124,7 +125,10 @@ if(CONFIG_TESTING_OSTEST)
124125

125126
if(NOT CONFIG_DISABLE_MQUEUE)
126127
if(NOT CONFIG_DISABLE_PTHREAD)
127-
list(APPEND SRCS mqueue.c timedmqueue.c)
128+
list(APPEND SRCS timedmqueue.c)
129+
if(NOT CONFIG_DISABLE_ALL_SIGNALS)
130+
list(APPEND SRCS mqueue.c)
131+
endif()
128132
endif() # CONFIG_DISABLE_PTHREAD
129133
endif() # CONFIG_DISABLE_MQUEUE
130134

0 commit comments

Comments
 (0)