From nobody Mon Feb 9 11:07:51 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1667922000; cv=none; d=zohomail.com; s=zohoarc; b=ZfzNZqG8b6vawSdr0mWjt8hVKqzVLyZk1y6NQi+RbUWz1W8s2Vo0kkvD2BHkITybpSWmYVC4upJfswgKDKCutxWMLRokTovDG+Nu38mLXP9t/THQuETRUY3yDYfUWCYZjytZSbeT8fSzam5vHbWIsydWXSsHjyvVRERoh1o7axo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1667922000; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=IHJiRbbc4+Aidap5+VwyVe11Gr7pkZA1msFnNdA4D0I=; b=VPpLBHzyS/bJEwARvMGdNQbQ5UxU5oaCruFvbMP0l2pxypyoVB2uobM4TygH1rv+Iy65C9NiKi6RgN44B3CQVGaKDwExkaFlyicvKBEzivQF15ZNn+wQGaZy+hSVvetVbgKOywU1mqbvOOc7q2C5nKxKSzP7UQNhzCrT+2FfO/o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 16679220000581000.6624774924658; Tue, 8 Nov 2022 07:40:00 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.440162.694279 (Exim 4.92) (envelope-from ) id 1osQhR-0007Gu-M6; Tue, 08 Nov 2022 15:39:41 +0000 Received: by outflank-mailman (output) from mailman id 440162.694279; Tue, 08 Nov 2022 15:39:41 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1osQhR-0007Gn-JC; Tue, 08 Nov 2022 15:39:41 +0000 Received: by outflank-mailman (input) for mailman id 440162; Tue, 08 Nov 2022 15:39:40 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1osQhQ-0007Fx-Dg for xen-devel@lists.xenproject.org; Tue, 08 Nov 2022 15:39:40 +0000 Received: from esa5.hc3370-68.iphmx.com (esa5.hc3370-68.iphmx.com [216.71.155.168]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 8d4e3290-5f7b-11ed-91b5-6bf2151ebd3b; Tue, 08 Nov 2022 16:39:39 +0100 (CET) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 8d4e3290-5f7b-11ed-91b5-6bf2151ebd3b DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1667921978; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=hQno2BG9QzWV381/kBdkjocEF/Hky2yAxo4hwyxhbW8=; b=JiG3Z1Flq52+kfeCl1udaItI2Lijp/awhDhrsN6iQfsZ03wLHs/mvsYi EupEGgSRKMiz/iMr9hCRP9AUFTQtRQPGVgp/ZYMmEYJ1ExLlJN3+HgUd6 LaMY4hw8vVArcV2hipHLPuLMOeTTdqWeGp/kM1nR3v/n5Awb8Ohm1b6sr c=; Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none X-SBRS: None X-MesageID: 83478170 X-Ironport-Server: esa5.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.83 X-Policy: $RELAYED IronPort-Data: A9a23:sesTT64v/yz9bk3iZOQfzgxRtDTHchMFZxGqfqrLsTDasY5as4F+v mdLUTrQOPyMN2LxKI1+bIiwp0sE6p6Byd8ySQZkpSo8Hi5G8cbLO4+Ufxz6V8+wwm8vb2o8t plDNYOQRCwQZiWBzvt4GuG59RGQ7YnRGvynTraBYnoqLeNdYH9JoQp5nOIkiZJfj9G8Agec0 fv/uMSaM1K+s9JOGjt8B5mr9VU+4pwehBtC5gZkPKkT7AeE/5UoJMl3yZ+ZfiOQrrZ8RoZWd 86bpJml82XQ+QsaC9/Nut4XpWVTH9Y+lSDX4pZnc/DKbipq/0Te4Y5iXBYoUm9Fii3hojxE4 I4lWapc6+seFvakdOw1C3G0GszlVEFM0OevzXOX6aR/w6BaGpdFLjoH4EweZOUlFuhL7W5my NY0JmA3NBO5nvuRw7eZQcMxhZhkBZy+VG8fkikIITDxCP8nRdbIQrnQ5M8e1zA17ixMNa+AP YxDM2MpNUmeJU0UUrsUIMtWcOOAi3XhcjsetFWPoqkf6GnP1g1hlrPqNbI5f/TaHpkKzh/H/ goq+Uz5KUsVaeetywGl0W3zmebPmwrqd40rQejQGvlC3wTImz175ActfVeyv/SRkEO1XNNbb UsO9UIGsqwa5EGtCN7nUHWQsHOC+xIRRddUO+k78x2WjLrZ5R6DAWoJRSIHb8Yp3OcWSDowx xm2ltXmLTV1tfueTnf1y1uPhWrsY25PdzZEPHJaC1teizX+nG0tpi/lYtgzKvS2tMTsPjL14 Tug8StiwJxG2KbnyJ6H1VzAhjutoL3AQQg0+hjbUwqZ0+9pWGK2T9f2sAaGtJ6sOK7cFwDc5 yZcx6By+chUVfmweDqxrPLh9V1Dz9KMK3XijFFmBPHNHBz9qif4Lei8DNyTTXqF0/romxezP ic/WisLvve/2UdGiocmC79d8+xwkcDd+S3ND5g5rrNmO/CdjjOv8iB0flK31GvwikUqmqxXE c7FL5n8UShDUfw9kmreqwIhPVgDn35W+I8ubcqjk0TPPUS2OBZ5tovpwHPRN7tkvctoUS3e8 spFNtvi9vmseLSWX8QWmKZNRW03wY8TXMGr9JYMLbbTe2KL2ggJUpfs/F/oQKQ994w9qwsC1 ijVtpNwoLYnuUD6FA== IronPort-HdrOrdr: A9a23:aepYbK7oWaexfs/5UgPXwPLXdLJyesId70hD6qhwISY1TiX+rb HXoB17726MtN9/YgBCpTntAsa9qDbnhPpICOoqTNGftWvdyQmVxehZhOOIqVCNJ8S9zJ876U 4JSdkENDSaNzhHZKjBjjVQa+xQpeW6zA== X-IronPort-AV: E=Sophos;i="5.96,148,1665460800"; d="scan'208";a="83478170" From: =?UTF-8?q?Edwin=20T=C3=B6r=C3=B6k?= To: CC: Henry Wang , =?UTF-8?q?Edwin=20T=C3=B6r=C3=B6k?= , Christian Lindig , David Scott , Wei Liu , Anthony PERARD Subject: [PATCH for-4.17 v3 13/15] tools/ocaml/xenstored: set uncaught exception handler Date: Tue, 8 Nov 2022 15:34:05 +0000 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1667922001203100001 Helps debug fatal errors during live update Previously this would've just gone to /dev/null, because: * daemonize reopens stderr as /dev/null * systemd redirects stderr to /dev/null too Previously the only way to debug this was to manually run oxenstored with --no-fork, but when you have a fatal error and oxenstored just disappears you'd want to know why. There has been at least one observed instance of a bug where oxenstored just disappeared inexplicably (it was believed due to an OOM exception). Signed-off-by: Edwin T=C3=B6r=C3=B6k Acked-by: Christian Lindig --- Reason for inclusion in 4.17: - avoids losing crucial information during a fatal error (e.g. during live update) Changes since v2: - new in v3 --- tools/ocaml/xenstored/logging.ml | 33 ++++++++++++++++++++++++++++++ tools/ocaml/xenstored/xenstored.ml | 3 ++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/tools/ocaml/xenstored/logging.ml b/tools/ocaml/xenstored/loggi= ng.ml index 021ebc465b..cced038c48 100644 --- a/tools/ocaml/xenstored/logging.ml +++ b/tools/ocaml/xenstored/logging.ml @@ -342,3 +342,36 @@ let xb_answer ~tid ~con ~ty data =3D let watch_not_fired ~con perms path =3D let data =3D Printf.sprintf "EPERM perms=3D[%s] path=3D%s" perms path in access_logging ~tid:0 ~con ~data Watch_not_fired ~level:Info + +let print_flush msg =3D + prerr_endline msg; + flush stderr + +let msg_of exn bt =3D + Printf.sprintf "Fatal exception: %s\n%s\n" (Printexc.to_string exn) + (Printexc.raw_backtrace_to_string bt) + +let fallback_exception_handler exn bt =3D + (* stderr goes to /dev/null, so use the logger where possible, + but always print to stderr too, in case everything else fails, + e.g. this can be used to debug with --no-fork + + this function should try not to raise exceptions, but if it does + the ocaml runtime should still print the exception, both the original, + and the one from this function, but to stderr this time + *) + let msg =3D msg_of exn bt in + print_flush msg; + (* See Printexc.set_uncaught_exception_handler, need to flush, + so has to call stop and flush *) + match !xenstored_logger with + | Some l -> error "xenstored-fallback" "%s" msg; l.stop () + | None -> + (* Too early, no logger set yet. + We normally try to use the configured logger so we don't flood sysl= og + during development for example, or if the user has a file set + *) + try Syslog.log Syslog.Daemon Syslog.Err msg + with e -> + let bt =3D Printexc.get_raw_backtrace () in + print_flush @@ msg_of e bt diff --git a/tools/ocaml/xenstored/xenstored.ml b/tools/ocaml/xenstored/xen= stored.ml index 78177b116f..6828764f92 100644 --- a/tools/ocaml/xenstored/xenstored.ml +++ b/tools/ocaml/xenstored/xenstored.ml @@ -357,7 +357,8 @@ let tweak_gc () =3D Gc.set { (Gc.get ()) with Gc.max_overhead =3D !Define.gc_max_overhead } =20 =20 -let _ =3D +let () =3D + Printexc.set_uncaught_exception_handler Logging.fallback_exception_handl= er; let cf =3D do_argv in let pidfile =3D if Sys.file_exists (config_filename cf) then --=20 2.34.1