From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com
Subject: [Qemu-devel] [PATCH 6/7] qemu-nbd: fix socket creation race
Date: Fri, 4 Nov 2011 15:51:23 +0100 [thread overview]
Message-ID: <1320418284-11081-7-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1320418284-11081-1-git-send-email-pbonzini@redhat.com>
Now that the client and server are in the same process, there is
no need to race on the creation of the socket. We can open the
listening socket before starting the client thread.
This avoids that "qemu-nbd -v -c" prints this once before connecting
successfully to the socket:
connect(unix:/var/lock/qemu-nbd-nbd0): No such file or directory
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
qemu-nbd.c | 30 +++++++++++++++---------------
1 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/qemu-nbd.c b/qemu-nbd.c
index 7490008..20fe4b5 100644
--- a/qemu-nbd.c
+++ b/qemu-nbd.c
@@ -204,10 +204,7 @@ static void *nbd_client_thread(void *arg)
do {
sock = unix_socket_outgoing(sockpath);
if (sock == -1) {
- if (errno != ENOENT && errno != ECONNREFUSED) {
- goto out;
- }
- sleep(1); /* wait parent */
+ goto out;
}
} while (sock == -1);
@@ -484,8 +481,6 @@ int main(int argc, char **argv)
err(EXIT_FAILURE, "Could not find partition %d", partition);
if (device) {
- int ret;
-
/* Open before spawning new threads. In the future, we may
* drop privileges after opening.
*/
@@ -498,15 +493,6 @@ int main(int argc, char **argv)
sockpath = g_malloc(128);
snprintf(sockpath, 128, SOCKET_PATH, basename(device));
}
-
- ret = pthread_create(&client_thread, NULL, nbd_client_thread, &fd);
- if (ret != 0) {
- errx(EXIT_FAILURE, "Failed to create client thread: %s",
- strerror(ret));
- }
- } else {
- /* Shut up GCC warnings. */
- memset(&client_thread, 0, sizeof(client_thread));
}
sharing_fds = g_malloc((shared + 1) * sizeof(int));
@@ -519,6 +505,20 @@ int main(int argc, char **argv)
if (sharing_fds[0] == -1)
return 1;
+
+ if (device) {
+ int ret;
+
+ ret = pthread_create(&client_thread, NULL, nbd_client_thread, &fd);
+ if (ret != 0) {
+ errx(EXIT_FAILURE, "Failed to create client thread: %s",
+ strerror(ret));
+ }
+ } else {
+ /* Shut up GCC warnings. */
+ memset(&client_thread, 0, sizeof(client_thread));
+ }
+
max_fd = sharing_fds[0];
nb_fds++;
--
1.7.6.4
next prev parent reply other threads:[~2011-11-04 14:52 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-04 14:51 [Qemu-devel] [PATCH 0/7] reorganize operation of "qemu-nbd -c" and fix it Paolo Bonzini
2011-11-04 14:51 ` [Qemu-devel] [PATCH 1/7] nbd: treat EPIPE from NBD_DO_IT as success Paolo Bonzini
2011-11-04 14:51 ` [Qemu-devel] [PATCH 2/7] qemu-nbd: trap SIGTERM Paolo Bonzini
2011-11-04 14:51 ` [Qemu-devel] [PATCH 3/7] qemu-nbd: rename socket variable Paolo Bonzini
2011-11-04 14:51 ` [Qemu-devel] [PATCH 4/7] qemu-nbd: move client to a thread Paolo Bonzini
2011-11-04 14:51 ` [Qemu-devel] [PATCH 5/7] qemu-nbd: print error messages from the daemon through a pipe Paolo Bonzini
2011-11-04 14:51 ` Paolo Bonzini [this message]
2011-11-04 14:51 ` [Qemu-devel] [PATCH 7/7] qemu-nbd: open the block device after starting the client thread Paolo Bonzini
2011-11-08 15:08 ` [Qemu-devel] [PATCH 0/7] reorganize operation of "qemu-nbd -c" and fix it Kevin Wolf
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=1320418284-11081-7-git-send-email-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
/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;
as well as URLs for NNTP newsgroup(s).