Subject: bug#58485: [shepherd] Restarting guix-publish fails

From: Ludovic Courtès <[email-masked]>
Date: Thu, 17 Nov 2022 09:24:05 +0100

Hi,

Lars-Dominik Braun <[email-masked]> skribis:

> 1     kill(-18096, SIGTERM)             = 0
> 1     newfstatat(AT_FDCWD, "/etc/localtime", {st_mode=S_IFREG|0444, st_size=2298, ...}, 0) = 0
> 1     write(17, "shepherd[1]: Service guix-publish has been stopped.\n", 52) = 52
> 1     socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 36
> 1     setsockopt(36, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
> 1     bind(36, {sa_family=AF_INET, sin_port=htons(8082), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EADDRINUSE (Address already in use)
> 1     write(23, "(reply (version 0) (result #f) (error (error (version 0) action-exception start guix-publish system-error (\"bind\" \"~A\" (\"Address already in use\") (98)))) (messages (\"Service guix-publish has been stopped.\")))", 208) = 208
> 1     close(23)
> ---snap---
>
> The obvious explanation would be that stopping does not wait for the
> process to actually exit. make-kill-destructor does not waitpid it seems
> and 'running is set unconditionally to #f after 'stop has finished.

Indeed.  This is fixed by Shepherd commit
d97592f58603ff51cb280ae57d413c8731e601b3, which will be in the upcoming
0.9.3 release.

Thanks,
Ludo’.