xref: /openbsd-src/regress/misc/exceptions/threads/exceptions.cc (revision 824adb5411e4389b29bae28eba5c2c2bbd147f34)
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()1258fbf5d6Sotto a()
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()2458fbf5d6Sotto b()
2558fbf5d6Sotto {
2658fbf5d6Sotto 	a();
2758fbf5d6Sotto }
2858fbf5d6Sotto 
2958fbf5d6Sotto void *
c(void *)3058fbf5d6Sotto c(void *)
3158fbf5d6Sotto {
3258fbf5d6Sotto 	b();
33*824adb54Sbluhm 	return NULL;
3458fbf5d6Sotto }
3558fbf5d6Sotto 
3658fbf5d6Sotto #define N 100
3758fbf5d6Sotto 
3858fbf5d6Sotto int
main()3958fbf5d6Sotto main()
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