mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
Fix thread shutdown race which could cause clvmd to hang in pthread_join.
This commit is contained in:
parent
5937664052
commit
ceda2b1426
@ -4,6 +4,7 @@ Version 2.01.04 -
|
|||||||
Remove unused -f from pvmove.
|
Remove unused -f from pvmove.
|
||||||
Gulm clvmd doesn't report "connection refused" errors.
|
Gulm clvmd doesn't report "connection refused" errors.
|
||||||
clvmd does a basic config file sanity check at startup.
|
clvmd does a basic config file sanity check at startup.
|
||||||
|
Fix potential thread shutdown race in clvmd.
|
||||||
|
|
||||||
Version 2.01.03 - 1st February 2005
|
Version 2.01.03 - 1st February 2005
|
||||||
===================================
|
===================================
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2002-2004 Sistina Software, Inc. All rights reserved.
|
* Copyright (C) 2002-2004 Sistina Software, Inc. All rights reserved.
|
||||||
* Copyright (C) 2004 Red Hat, Inc. All rights reserved.
|
* Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
* This file is part of LVM2.
|
* This file is part of LVM2.
|
||||||
*
|
*
|
||||||
@ -719,7 +719,7 @@ static int read_from_local_sock(struct local_client *thisfd)
|
|||||||
if (thisfd->bits.localsock.threadid) {
|
if (thisfd->bits.localsock.threadid) {
|
||||||
DEBUGLOG("Waiting for child thread\n");
|
DEBUGLOG("Waiting for child thread\n");
|
||||||
pthread_mutex_lock(&thisfd->bits.localsock.mutex);
|
pthread_mutex_lock(&thisfd->bits.localsock.mutex);
|
||||||
thisfd->bits.localsock.state = POST_COMMAND;
|
thisfd->bits.localsock.state = PRE_COMMAND;
|
||||||
pthread_cond_signal(&thisfd->bits.localsock.cond);
|
pthread_cond_signal(&thisfd->bits.localsock.cond);
|
||||||
pthread_mutex_unlock(&thisfd->bits.localsock.mutex);
|
pthread_mutex_unlock(&thisfd->bits.localsock.mutex);
|
||||||
pthread_kill(thisfd->bits.localsock.threadid, SIGUSR2);
|
pthread_kill(thisfd->bits.localsock.threadid, SIGUSR2);
|
||||||
@ -1336,14 +1336,12 @@ static void *pre_and_post_thread(void *arg)
|
|||||||
|
|
||||||
DEBUGLOG("Got post command condition...\n");
|
DEBUGLOG("Got post command condition...\n");
|
||||||
|
|
||||||
|
/* POST function must always run, even if the client aborts */
|
||||||
status = 0;
|
status = 0;
|
||||||
do_post_command(client);
|
do_post_command(client);
|
||||||
|
|
||||||
write(pipe_fd, &status, sizeof(int));
|
write(pipe_fd, &status, sizeof(int));
|
||||||
|
|
||||||
if (client->bits.localsock.finished)
|
|
||||||
break;
|
|
||||||
|
|
||||||
DEBUGLOG("Waiting for next pre command\n");
|
DEBUGLOG("Waiting for next pre command\n");
|
||||||
|
|
||||||
pthread_mutex_lock(&client->bits.localsock.mutex);
|
pthread_mutex_lock(&client->bits.localsock.mutex);
|
||||||
|
Loading…
Reference in New Issue
Block a user