mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
dmeventd: fifo init and close cleanup
Use structure initialization for easier to read code. Close only descriptors >= 0.
This commit is contained in:
parent
fc9d4dd11f
commit
6dae237303
@ -1826,7 +1826,13 @@ static void _daemonize(void)
|
|||||||
|
|
||||||
static void restart(void)
|
static void restart(void)
|
||||||
{
|
{
|
||||||
struct dm_event_fifos fifos = { 0 };
|
struct dm_event_fifos fifos = {
|
||||||
|
.server = -1,
|
||||||
|
.client = -1,
|
||||||
|
/* FIXME Make these either configurable or depend directly on dmeventd_path */
|
||||||
|
.client_path = DM_EVENT_FIFO_CLIENT,
|
||||||
|
.server_path = DM_EVENT_FIFO_SERVER
|
||||||
|
};
|
||||||
struct dm_event_daemon_message msg = { 0 };
|
struct dm_event_daemon_message msg = { 0 };
|
||||||
int i, count = 0;
|
int i, count = 0;
|
||||||
char *message;
|
char *message;
|
||||||
|
@ -468,10 +468,6 @@ int init_fifos(struct dm_event_fifos *fifos)
|
|||||||
/* FIXME? Is fifo the most suitable method? Why not share
|
/* FIXME? Is fifo the most suitable method? Why not share
|
||||||
comms/daemon code with something else e.g. multipath? */
|
comms/daemon code with something else e.g. multipath? */
|
||||||
|
|
||||||
/* FIXME Make these either configurable or depend directly on dmeventd_path */
|
|
||||||
fifos->client_path = DM_EVENT_FIFO_CLIENT;
|
|
||||||
fifos->server_path = DM_EVENT_FIFO_SERVER;
|
|
||||||
|
|
||||||
/* Open the fifo used to read from the daemon. */
|
/* Open the fifo used to read from the daemon. */
|
||||||
if ((fifos->server = open(fifos->server_path, O_RDWR)) < 0) {
|
if ((fifos->server = open(fifos->server_path, O_RDWR)) < 0) {
|
||||||
log_sys_error("open", fifos->server_path);
|
log_sys_error("open", fifos->server_path);
|
||||||
@ -481,32 +477,27 @@ int init_fifos(struct dm_event_fifos *fifos)
|
|||||||
/* Lock out anyone else trying to do communication with the daemon. */
|
/* Lock out anyone else trying to do communication with the daemon. */
|
||||||
if (flock(fifos->server, LOCK_EX) < 0) {
|
if (flock(fifos->server, LOCK_EX) < 0) {
|
||||||
log_sys_error("flock", fifos->server_path);
|
log_sys_error("flock", fifos->server_path);
|
||||||
if (close(fifos->server))
|
goto bad;
|
||||||
log_sys_error("close", fifos->server_path);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if ((fifos->client = open(fifos->client_path, O_WRONLY | O_NONBLOCK)) < 0) {*/
|
/* if ((fifos->client = open(fifos->client_path, O_WRONLY | O_NONBLOCK)) < 0) {*/
|
||||||
if ((fifos->client = open(fifos->client_path, O_RDWR | O_NONBLOCK)) < 0) {
|
if ((fifos->client = open(fifos->client_path, O_RDWR | O_NONBLOCK)) < 0) {
|
||||||
log_sys_error("open", fifos->client_path);
|
log_sys_error("open", fifos->client_path);
|
||||||
if (close(fifos->server))
|
goto bad;
|
||||||
log_sys_error("close", fifos->server_path);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
bad:
|
||||||
|
if (close(fifos->server))
|
||||||
|
log_sys_debug("close", fifos->server_path);
|
||||||
|
fifos->server = -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize client. */
|
/* Initialize client. */
|
||||||
static int _init_client(char *dmeventd_path, struct dm_event_fifos *fifos)
|
static int _init_client(char *dmeventd_path, struct dm_event_fifos *fifos)
|
||||||
{
|
{
|
||||||
/* init fifos */
|
|
||||||
memset(fifos, 0, sizeof(*fifos));
|
|
||||||
|
|
||||||
/* FIXME Make these either configurable or depend directly on dmeventd_path */
|
|
||||||
fifos->client_path = DM_EVENT_FIFO_CLIENT;
|
|
||||||
fifos->server_path = DM_EVENT_FIFO_SERVER;
|
|
||||||
|
|
||||||
if (!_start_daemon(dmeventd_path, fifos))
|
if (!_start_daemon(dmeventd_path, fifos))
|
||||||
return_0;
|
return_0;
|
||||||
|
|
||||||
@ -515,13 +506,16 @@ static int _init_client(char *dmeventd_path, struct dm_event_fifos *fifos)
|
|||||||
|
|
||||||
void fini_fifos(struct dm_event_fifos *fifos)
|
void fini_fifos(struct dm_event_fifos *fifos)
|
||||||
{
|
{
|
||||||
if (flock(fifos->server, LOCK_UN))
|
if (fifos->client >= 0 && close(fifos->client))
|
||||||
log_error("flock unlock %s", fifos->server_path);
|
|
||||||
|
|
||||||
if (close(fifos->client))
|
|
||||||
log_sys_error("close", fifos->client_path);
|
log_sys_error("close", fifos->client_path);
|
||||||
if (close(fifos->server))
|
|
||||||
log_sys_error("close", fifos->server_path);
|
if (fifos->server >= 0) {
|
||||||
|
if (flock(fifos->server, LOCK_UN))
|
||||||
|
log_sys_error("flock unlock", fifos->server_path);
|
||||||
|
|
||||||
|
if (close(fifos->server))
|
||||||
|
log_sys_error("close", fifos->server_path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get uuid of a device */
|
/* Get uuid of a device */
|
||||||
@ -585,7 +579,13 @@ static int _do_event(int cmd, char *dmeventd_path, struct dm_event_daemon_messag
|
|||||||
enum dm_event_mask evmask, uint32_t timeout)
|
enum dm_event_mask evmask, uint32_t timeout)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct dm_event_fifos fifos;
|
struct dm_event_fifos fifos = {
|
||||||
|
.server = -1,
|
||||||
|
.client = -1,
|
||||||
|
/* FIXME Make these either configurable or depend directly on dmeventd_path */
|
||||||
|
.client_path = DM_EVENT_FIFO_CLIENT,
|
||||||
|
.server_path = DM_EVENT_FIFO_SERVER
|
||||||
|
};
|
||||||
|
|
||||||
if (!_init_client(dmeventd_path, &fifos)) {
|
if (!_init_client(dmeventd_path, &fifos)) {
|
||||||
stack;
|
stack;
|
||||||
|
Loading…
Reference in New Issue
Block a user