From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: Current LibXL Status Date: Thu, 19 Nov 2015 11:33:39 +0000 Message-ID: <564DB393.3070805@citrix.com> References: <564CC43B.1000904@ainfosec.com> <1447924858.5647.15.camel@citrix.com> <564DAA8D.5060305@citrix.com> <1447932195.5647.46.camel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1447932195.5647.46.camel@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Campbell , Martin Osterloh , "xen-devel@lists.xen.org" List-Id: xen-devel@lists.xenproject.org On 19/11/15 11:23, Ian Campbell wrote: > create ! > title it libxl exit() on ENOMEM incompatible with gc'd languages > thanks Can this be extended to "should not use exit() in general" ? andrewcoop@andrewcoop:/local/xen.git/xen$ git grep exit\( -- :/tools/libxl/libxl* ../tools/libxl/libxl.c:1707: _exit(0); ../tools/libxl/libxl.c:1711: _exit(errno); ../tools/libxl/libxl.c:1716: _exit(-1); ../tools/libxl/libxl_aoutils.c:478: if (r) { LOGE(ERROR,"openpty failed"); _exit(-1); } ../tools/libxl/libxl_aoutils.c:482: if (rc) { LOGE(ERROR,"sendmsg to parent failed"); _exit(-1); } ../tools/libxl/libxl_aoutils.c:483: _exit(0); ../tools/libxl/libxl_bootloader.c:557: if (r) { LOGE(ERROR, "login_tty failed"); exit(-1); } ../tools/libxl/libxl_bootloader.c:559: exit(-1); ../tools/libxl/libxl_event.c:1387: exit(-1); ../tools/libxl/libxl_event.h:104: * and call exit(-1). ../tools/libxl/libxl_exec.c:106: _exit(-1); ../tools/libxl/libxl_exec.c:316: exit(255); ../tools/libxl/libxl_exec.c:324: _exit(127); ../tools/libxl/libxl_exec.c:340: _exit(r); ../tools/libxl/libxl_internal.c:28: _exit(-1); ../tools/libxl/libxl_remus_disk_drbd.c:229: _exit(ackwait); ../tools/libxl/libxl_save_callout.c:184: exit(-1); ../tools/libxl/libxl_save_helper.c:64: if (r < 0) { perror("memory allocation failed during logging"); exit(-1); } ../tools/libxl/libxl_save_helper.c:102: exit(-1); ../tools/libxl/libxl_save_helper.c:122: if (!r) { perror("memory allocation failed"); exit(-1); } ../tools/libxl/libxl_save_helper.c:189: if (r<0) { perror("write"); exit(-1); } ../tools/libxl/libxl_save_helper.c:210: if (r<=0) exit(-2); ../tools/libxl/libxl_save_helper.c:230: exit(0); ../tools/libxl/libxlu_cfg_l.c:1763: exit( YY_EXIT_FAILURE ); ../tools/libxl/libxlu_disk_l.c:2248: exit( YY_EXIT_FAILURE ); The majority of those are cases are not appropriate uses of exit(). AFAIIR, the *only* valid use of exit() in a library is to clean up in a child process from a library-initiated fork(). ~Andrew