mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-03 13:46:55 +02:00
Check the return code of pthread_create(). Otherwise we go into an infinite
loop if it fails, which is what what happened on my HP-UX box. (I think the reason it failed on that box is a misconfiguration on my behalf, but that's no reason to hang.)
This commit is contained in:
parent
3987e9e620
commit
336db7e347
@ -150,6 +150,7 @@ main(int argc, char *argv[])
|
|||||||
pthread_t thread1,
|
pthread_t thread1,
|
||||||
thread2;
|
thread2;
|
||||||
int fd;
|
int fd;
|
||||||
|
int rc;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
WSADATA wsaData;
|
WSADATA wsaData;
|
||||||
@ -199,8 +200,23 @@ main(int argc, char *argv[])
|
|||||||
/* Hold lock until we are ready for the child threads to exit. */
|
/* Hold lock until we are ready for the child threads to exit. */
|
||||||
pthread_mutex_lock(&init_mutex);
|
pthread_mutex_lock(&init_mutex);
|
||||||
|
|
||||||
pthread_create(&thread1, NULL, (void *(*) (void *)) func_call_1, NULL);
|
rc = pthread_create(&thread1, NULL, (void *(*) (void *)) func_call_1, NULL);
|
||||||
pthread_create(&thread2, NULL, (void *(*) (void *)) func_call_2, NULL);
|
if (rc != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Failed to create thread 1: %s **\nexiting\n",
|
||||||
|
strerror(rc));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
rc = pthread_create(&thread2, NULL, (void *(*) (void *)) func_call_2, NULL);
|
||||||
|
if (rc != 0)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* strerror() might not be thread-safe, and we already spawned thread
|
||||||
|
* 1 that uses it
|
||||||
|
*/
|
||||||
|
fprintf(stderr, "Failed to create thread 2 **\nexiting\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
while (thread1_done == 0 || thread2_done == 0)
|
while (thread1_done == 0 || thread2_done == 0)
|
||||||
sched_yield(); /* if this is a portability problem, remove it */
|
sched_yield(); /* if this is a portability problem, remove it */
|
||||||
|
Loading…
Reference in New Issue
Block a user