From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55930) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1boRnn-0000nq-4P for qemu-devel@nongnu.org; Mon, 26 Sep 2016 05:02:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1boRni-0000oB-8A for qemu-devel@nongnu.org; Mon, 26 Sep 2016 05:02:19 -0400 Received: from mx1.redhat.com ([209.132.183.28]:59120) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1boRni-0000nd-2w for qemu-devel@nongnu.org; Mon, 26 Sep 2016 05:02:14 -0400 References: <8e0d68a2-d7df-9252-a099-a8a31b621670@redhat.com> From: Michal Privoznik Message-ID: <155c94e1-29f2-d294-01e3-a78b394518f2@redhat.com> Date: Mon, 26 Sep 2016 11:02:10 +0200 MIME-Version: 1.0 In-Reply-To: <8e0d68a2-d7df-9252-a099-a8a31b621670@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v3 0/2] Produce better termination message List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini , qemu-devel@nongnu.org Cc: armbru@redhat.com, peter.maydell@linaro.org On 22.09.2016 18:43, Paolo Bonzini wrote: > > > On 21/09/2016 18:27, Michal Privoznik wrote: >> This is v2 of: >> http://lists.nongnu.org/archive/html/qemu-devel/2016-09/msg05058.html >> >> Diff to v2: >> - In 1/2 I've dropped stdio funcs in favour of g_file_get_contents() (thanks Dan!) >> >> Michal Privoznik (2): >> util: Introduce qemu_get_pid_name >> qemu_kill_report: Report PID name too >> >> include/qemu/osdep.h | 10 ++++++++++ >> util/oslib-posix.c | 27 +++++++++++++++++++++++++++ >> util/oslib-win32.c | 7 +++++++ >> vl.c | 8 ++++++-- >> 4 files changed, 50 insertions(+), 2 deletions(-) >> > > Patch 2/2 breaks "make check". You cannot call malloc from a signal > handler, and this shows as a deadlock in > /x86_64/virtio/scsi/pci/hotplug. You have to use the large buffer, > _but_ I cannot just keep patch 2 because you also have to use > open/read/close instead of stdio. Huh, this has beacame more hairy than I initially thought. An alternative suggestion might be to not call PID->name translate function from the signal handler, but call it just from the qemu_kill_report(). Yes, this will increase the chances of reporting incorrect process name, but there's no way to make this 100% correct. I mean even at the time that our signal callback is ran, the sender might be dead already and kernel might have spawn a different process under the same PID. Therefore I guess there's no real harm in doing the translation later. Moreover, if we want this to work on *BSD-s (where an libutil function is called which does malloc), then we must call the translate function from a safe place. On the other hand, malloc there could be reentrant. Michal