brintos

brintos / llvm-project-archived public Read only

0
0
Text · 728 B · cbcef94 Raw
36 lines · cpp
1// RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s2 3// Test that pause loop handles signals.4 5#include "test.h"6#include <signal.h>7#include <errno.h>8 9void handler(int signum) {10  write(2, "DONE\n", 5);11  _exit(0);12}13 14void *thread(void *arg) {15  for (;;)16    pause();17  return 0;18}19 20int main(int argc, char** argv) {21  struct sigaction act = {};22  act.sa_handler = &handler;23  if (sigaction(SIGUSR1, &act, 0)) {24    fprintf(stderr, "sigaction failed %d\n", errno);25    return 1;26  }27  pthread_t th;28  pthread_create(&th, 0, thread, 0);29  sleep(1);  // give it time to block in pause30  pthread_kill(th, SIGUSR1);31  sleep(10);  // signal handler must exit the process while we are here32  return 0;33}34 35// CHECK: DONE36