@@ -365,6 +365,8 @@ int main(int argc, char **argv) { // NOLINT
365365 sigemptyset (&sleep_sigset);
366366 sigaddset (&sleep_sigset, SIGALRM);
367367 sigprocmask (SIG_BLOCK, &sleep_sigset, nullptr );
368+ sigaddset (&sleep_sigset, SIGINT);
369+ sigaddset (&sleep_sigset, SIGTERM);
368370
369371 // MAIN loop
370372 std::size_t counter = 0 ;
@@ -393,22 +395,24 @@ int main(int argc, char **argv) { // NOLINT
393395 };
394396
395397 auto handle_sleep = [&]() {
396- if (random_interval_ms == 0 ) return ;
398+ if (random_interval_ms == 0 ) return false ;
397399
398400 int sig = 0 ;
399401 auto tmp = sigwait (&sleep_sigset, &sig);
400402 if (tmp == -1 ) {
401403 perror (" sigwait" );
402404 exit (EX_OSERR);
403405 }
406+
407+ return sig != SIGALRM;
404408 };
405409
406410 switch (alignment) {
407411 case BYTE:
408412 while (!terminate) {
409413 random_data<uint8_t >(
410414 shm->get_addr <uint8_t *>() + OFFSET, shm_elements, bitmask, semaphore, semaphore_max_time);
411- handle_sleep ();
415+ if ( handle_sleep ()) break ;
412416 if (handle_counter ()) break ;
413417 if (check_owner_pid ()) break ;
414418 }
@@ -417,7 +421,7 @@ int main(int argc, char **argv) { // NOLINT
417421 while (!terminate) {
418422 random_data<uint16_t >(
419423 shm->get_addr <uint8_t *>() + OFFSET, shm_elements, bitmask, semaphore, semaphore_max_time);
420- handle_sleep ();
424+ if ( handle_sleep ()) break ;
421425 if (handle_counter ()) break ;
422426 if (check_owner_pid ()) break ;
423427 }
@@ -426,7 +430,7 @@ int main(int argc, char **argv) { // NOLINT
426430 while (!terminate) {
427431 random_data<uint32_t >(
428432 shm->get_addr <uint8_t *>() + OFFSET, shm_elements, bitmask, semaphore, semaphore_max_time);
429- handle_sleep ();
433+ if ( handle_sleep ()) break ;
430434 if (handle_counter ()) break ;
431435 if (check_owner_pid ()) break ;
432436 }
@@ -435,7 +439,7 @@ int main(int argc, char **argv) { // NOLINT
435439 while (!terminate) {
436440 random_data<uint64_t >(
437441 shm->get_addr <uint8_t *>() + OFFSET, shm_elements, bitmask, semaphore, semaphore_max_time);
438- handle_sleep ();
442+ if ( handle_sleep ()) break ;
439443 if (handle_counter ()) break ;
440444 if (check_owner_pid ()) break ;
441445 }
0 commit comments