[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v5 1/3] contrib: add ivshmem client and server
From: |
Michael S. Tsirkin |
Subject: |
Re: [Qemu-devel] [PATCH v5 1/3] contrib: add ivshmem client and server |
Date: |
Sun, 7 Sep 2014 08:58:01 +0300 |
On Fri, Sep 05, 2014 at 02:07:54PM +0200, David Marchand wrote:
> Hello Michael,
>
> On 09/04/2014 05:56 PM, Michael S. Tsirkin wrote:
> >>+ /* create the unix listening socket */
> >>+ sock_fd = socket(AF_UNIX, SOCK_STREAM, 0);
> >>+ if (sock_fd < 0) {
> >>+ debug_log(server, "cannot create socket: %s\n", strerror(errno));
> >>+ goto err_close_shm;
> >>+ }
> >>+
> >>+ sun.sun_family = AF_UNIX;
> >>+ snprintf(sun.sun_path, sizeof(sun.sun_path), "%s",
> >>server->unix_sock_path);
> >>+ unlink(sun.sun_path);
> >
> >why unlink it?
>
> Yes, this is wrong, because this means that when starting multiple
> servers on the same socket, the last server is the one who wins ...
> while I think it should be the opposite (first server wins, as it may
> have some connected clients).
>
> I have been scratching my head about this: when should I unlink ?
>
> My current fix unlinks from ivshmem_server_close() (which should be the
> right place).
> I need to call this when exiting, but I can only do this when the server
> exits gracefully (when an error occurs on the server socket or when
> receiving a SIGTERM).
>
> If something unexpected happens (like a bug/crash or a SIGKILL), the
> socket won't be unlinked and the next server process will refuse to start.
> Is this something acceptable ?
>
> Do you have a better idea ?
>
>
> Thanks.
Is the point to prevent multiple servers from opening
the same socket? Either leave it up to the user,
or try to use some lock - unlink will never be
a safe way to do this. I advise for the former.
> --
> David Marchand
Re: [Qemu-devel] [PATCH v5 0/3] ivshmem: update documentation, add client/server tools, Michael S. Tsirkin, 2014/09/04