1*824adb54Sbluhm /* $OpenBSD: exceptions.cc,v 1.2 2021/10/06 12:43:14 bluhm Exp $ */ 258fbf5d6Sotto /* 358fbf5d6Sotto * Written by Otto Moerbeek <otto@drijf.net> 2021 Public Domain 458fbf5d6Sotto */ 558fbf5d6Sotto 658fbf5d6Sotto #include <string> 758fbf5d6Sotto #include <iostream> 858fbf5d6Sotto #include <err.h> 958fbf5d6Sotto #include <pthread.h> 1058fbf5d6Sotto 1158fbf5d6Sotto void a()1258fbf5d6Sottoa() 1358fbf5d6Sotto { 1458fbf5d6Sotto try { 1558fbf5d6Sotto throw std::string("foo"); 1658fbf5d6Sotto } 1758fbf5d6Sotto catch (const std::string& ex) { 1858fbf5d6Sotto if (ex != "foo") 1958fbf5d6Sotto errx(1, "foo"); 2058fbf5d6Sotto } 2158fbf5d6Sotto } 2258fbf5d6Sotto 2358fbf5d6Sotto void b()2458fbf5d6Sottob() 2558fbf5d6Sotto { 2658fbf5d6Sotto a(); 2758fbf5d6Sotto } 2858fbf5d6Sotto 2958fbf5d6Sotto void * c(void *)3058fbf5d6Sottoc(void *) 3158fbf5d6Sotto { 3258fbf5d6Sotto b(); 33*824adb54Sbluhm return NULL; 3458fbf5d6Sotto } 3558fbf5d6Sotto 3658fbf5d6Sotto #define N 100 3758fbf5d6Sotto 3858fbf5d6Sotto int main()3958fbf5d6Sottomain() 4058fbf5d6Sotto { 4158fbf5d6Sotto int i; 4258fbf5d6Sotto pthread_t p[N]; 4358fbf5d6Sotto 4458fbf5d6Sotto for (i = 0; i < N; i++) 45*824adb54Sbluhm if (pthread_create(&p[i], NULL, c, NULL) != 0) 46*824adb54Sbluhm err(1, NULL); 4758fbf5d6Sotto for (i = 0; i < N; i++) 48*824adb54Sbluhm if (pthread_join(p[i], NULL) != 0) 49*824adb54Sbluhm err(1, NULL); 5058fbf5d6Sotto std::cout << "."; 5158fbf5d6Sotto return 0; 5258fbf5d6Sotto } 53