Linux Device Mapper development
 help / color / mirror / Atom feed
From: Benjamin Marzinski <bmarzins@redhat.com>
To: device-mapper development <dm-devel@redhat.com>
Cc: Christophe Varoqui <christophe.varoqui@gmail.com>
Subject: [PATCH 08/16] Avoid race between ueventloop and uevqloop
Date: Thu,  2 May 2013 16:46:29 -0500	[thread overview]
Message-ID: <1367531197-8987-9-git-send-email-bmarzins@redhat.com> (raw)
In-Reply-To: <1367531197-8987-1-git-send-email-bmarzins@redhat.com>

ueventloop sets up uevq_lockp and uev_condp, which uevqloop uses.
If uevqloop accesses these structures before ueventloop has
initialized them, it will not wake up to process uevents. This patch
statically initializes these structures so they will always be
initialized. Also, since calling LIST_HEAD(uevq) initializes it,
there is no reason to call INIT_LIST_HEAD on it later.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
---
 libmultipath/uevent.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/libmultipath/uevent.c b/libmultipath/uevent.c
index bc74d38..0643e14 100644
--- a/libmultipath/uevent.c
+++ b/libmultipath/uevent.c
@@ -53,8 +53,10 @@ typedef int (uev_trigger)(struct uevent *, void * trigger_data);
 
 pthread_t uevq_thr;
 LIST_HEAD(uevq);
-pthread_mutex_t uevq_lock, *uevq_lockp = &uevq_lock;
-pthread_cond_t  uev_cond,  *uev_condp  = &uev_cond;
+pthread_mutex_t uevq_lock = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_t *uevq_lockp = &uevq_lock;
+pthread_cond_t uev_cond = PTHREAD_COND_INITIALIZER;
+pthread_cond_t *uev_condp = &uev_cond;
 uev_trigger *my_uev_trigger;
 void * my_trigger_data;
 int servicing_uev;
@@ -409,10 +411,6 @@ int uevent_listen(void)
 	 * thereby not getting to empty the socket's receive buffer queue
 	 * often enough.
 	 */
-	INIT_LIST_HEAD(&uevq);
-
-	pthread_mutex_init(uevq_lockp, NULL);
-	pthread_cond_init(uev_condp, NULL);
 	pthread_cleanup_push(uevq_stop, NULL);
 
 	monitor = udev_monitor_new_from_netlink(conf->udev, "udev");
@@ -525,8 +523,6 @@ out:
 	if (need_failback)
 		err = failback_listen();
 	pthread_cleanup_pop(1);
-	pthread_mutex_destroy(uevq_lockp);
-	pthread_cond_destroy(uev_condp);
 	return err;
 }
 
-- 
1.8.2

  parent reply	other threads:[~2013-05-02 21:46 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-02 21:46 [PATCH 00/16] multipath-tools: miscellaneous multipath patches Benjamin Marzinski
2013-05-02 21:46 ` [PATCH 01/16] Make kpartx advise modprobe instead of insmod Benjamin Marzinski
2013-05-02 21:46 ` [PATCH 02/16] Make kpartx correctly handle non-512 byte GPT Benjamin Marzinski
2013-05-02 21:46 ` [PATCH 03/16] Fix print_multipath_topology for large outputs Benjamin Marzinski
2013-05-02 21:46 ` [PATCH 04/16] Don't print checker messages for ghost paths Benjamin Marzinski
2013-05-02 21:46 ` [PATCH 05/16] Fix a couple of signal issues Benjamin Marzinski
2013-05-03  6:36   ` Bart Van Assche
2013-05-03 20:24     ` Benjamin Marzinski
2013-05-04  7:19       ` Bart Van Assche
2013-05-02 21:46 ` [PATCH 06/16] Fix hardware entry matching code Benjamin Marzinski
2013-05-02 21:46 ` [PATCH 07/16] Fix some socket issues Benjamin Marzinski
2013-05-02 21:46 ` Benjamin Marzinski [this message]
2013-05-02 21:46 ` [PATCH 09/16] Add existing multipath devices to wwids file on Benjamin Marzinski
2013-05-02 21:46 ` [PATCH 10/16] add wwids file cleanup options Benjamin Marzinski
2013-05-02 21:46 ` [PATCH 11/16] Fix max path checker timing Benjamin Marzinski
2013-05-03  6:59   ` Hannes Reinecke
2013-05-03 15:44     ` Benjamin Marzinski
2013-05-03 17:59       ` [PATCH v2 " Benjamin Marzinski
2013-05-06  5:42         ` Hannes Reinecke
2013-05-02 21:46 ` [PATCH 12/16] Make set_multipath_wwid actually do something Benjamin Marzinski
2013-05-02 21:46 ` [PATCH 13/16] Make multipathd deal better with uninitialized paths Benjamin Marzinski
2013-05-02 21:46 ` [PATCH 14/16] Stop annoying prio_lookup warning messages Benjamin Marzinski
2013-05-02 21:46 ` [PATCH 15/16] make multipathd disable queue_without_daemon by default Benjamin Marzinski
2013-05-02 21:46 ` [PATCH 16/16] Use mapname to choose kpartx delimiter Benjamin Marzinski
2013-05-06 19:45 ` [PATCH 00/16] multipath-tools: miscellaneous multipath patches Christophe Varoqui

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1367531197-8987-9-git-send-email-bmarzins@redhat.com \
    --to=bmarzins@redhat.com \
    --cc=christophe.varoqui@gmail.com \
    --cc=dm-devel@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox