libvirt/src/util
Eric Blake f3d6754415 command: avoid double close
Previously, the parent process opened 'null' to /dev/null, then
the child process closes 'null' as well as 'childout'.  But if
childout was set to be null, then this is a double close.  At
least the double close was confined to the child process after a
fork, and therefore there is no risk of another thread opening
an fd of the same value to be bitten by the double close, but it
is always better to avoid double-close to begin with.

Additionally, if all three fds were specified, then opening
'null' was wasted.

This patch fixes things to lazily open null on the first use,
then guarantees it gets closed exactly once.

* src/util/command.c (getDevNull): New helper function.
(virExecWithHook): Use it to avoid spurious opens and double close.
2011-06-14 09:17:57 -06:00
..
authhelper.c esx: Move username and password helper functions to authhelper.c 2010-03-16 20:15:32 +01:00
authhelper.h esx: Move username and password helper functions to authhelper.c 2010-03-16 20:15:32 +01:00
bitmap.c maint: rename virBufferVSprintf to virBufferAsprintf 2011-05-05 13:47:40 -06:00
bitmap.h Put <stdbool.h> into internal.h so it is available everywhere 2011-02-24 12:04:06 +00:00
bridge.c maint: omit translation for all VIR_INFO 2011-05-11 15:20:33 -06:00
bridge.h Allow brAddTap to create a tap device that is down 2011-02-17 13:36:22 -05:00
buf.c buf: add virBufferVasprintf 2011-05-05 13:48:19 -06:00
buf.h buf: add virBufferVasprintf 2011-05-05 13:48:19 -06:00
cgroup.c libvirt,logging: cleanup VIR_XXX0() 2011-05-11 12:41:14 -06:00
cgroup.h virsh: fix memtune's help message for swap_hard_limit 2011-03-17 16:45:06 -06:00
command.c command: avoid double close 2011-06-14 09:17:57 -06:00
command.h Move virRun, virExec*, virFork to util/command 2011-06-07 14:06:11 -04:00
conf.c maint: rename virBufferVSprintf to virBufferAsprintf 2011-05-05 13:47:40 -06:00
conf.h esx: Allow '-' in VMX entry names 2010-09-23 10:37:10 +02:00
dnsmasq.c network: fix return value of hostsFileWrite 2011-04-28 10:44:57 -04:00
dnsmasq.h Convert virNetwork to use virSocketAddr everywhere 2010-10-22 12:07:02 +01:00
ebtables.c Move virRun, virExec*, virFork to util/command 2011-06-07 14:06:11 -04:00
ebtables.h build: consistently indent preprocessor directives 2010-03-09 19:22:28 +01:00
event_poll.c Use virTimeMs when appropriate 2011-06-13 11:24:58 +02:00
event_poll.h Move event code out of the daemon/ into src/util/ 2011-03-07 14:16:13 +00:00
event.c libvirt,logging: cleanup VIR_XXX0() 2011-05-11 12:41:14 -06:00
event.h Fix documentation for virEventAddTimeout() 2010-10-26 10:23:03 +02:00
files.c deprecate fclose() and introduce VIR_{FORCE_}FCLOSE() 2010-11-16 21:13:29 -05:00
files.h Put <stdbool.h> into internal.h so it is available everywhere 2011-02-24 12:04:06 +00:00
hash.c libvirt,logging: cleanup VIR_XXX0() 2011-05-11 12:41:14 -06:00
hash.h tests: More unit tests for internal hash APIs 2011-04-27 15:32:30 +02:00
hooks.c util: Initialize hooks at daemon shutdown if no hooks defined 2011-04-28 14:48:26 +08:00
hooks.h qemu: add two hook script events "prepare" and "release" 2011-03-22 21:12:36 +08:00
hostusb.c Remove virConnectPtr from virRaiseErrorFull 2011-04-17 07:22:23 +02:00
hostusb.h build: consistently indent preprocessor directives 2010-03-09 19:22:28 +01:00
interface.c Fix two uninitialized variable warnings 2011-05-10 08:39:56 +02:00
interface.h add 802.1Qbh and 802.1Qbg handling 2010-06-02 21:35:22 -04:00
iohelper.c virFDStream: Add option for delete file after it's opening 2011-05-13 12:44:49 +02:00
iptables.c Remove virConnectPtr from virRaiseErrorFull 2011-04-17 07:22:23 +02:00
iptables.h Update iptables.c to also support ip6tables. 2010-12-23 15:54:32 -05:00
json.c libvirt,logging: cleanup VIR_XXX0() 2011-05-11 12:41:14 -06:00
json.h json: Fix *GetBoolean functions 2011-05-09 14:02:13 +02:00
logging.c build: fix VIR_DEBUG on mingw 2011-05-24 12:34:43 -06:00
logging.h build: avoid gcc preprocessor extensions 2011-05-11 13:28:50 -06:00
macvtap.c Add support for 'passthru' mode for direct network interfaces 2011-05-18 08:15:08 -06:00
macvtap.h Add support for 'passthru' mode for direct network interfaces 2011-05-18 08:15:08 -06:00
memory.c build: fix cygwin strerror_r failure 2011-02-11 12:32:17 -07:00
memory.h build: make VIR_FREE do some type checking 2011-04-25 10:20:18 -06:00
network.c Remove virConnectPtr from virRaiseErrorFull 2011-04-17 07:22:23 +02:00
network.h Put <stdbool.h> into internal.h so it is available everywhere 2011-02-24 12:04:06 +00:00
pci.c Move virRun, virExec*, virFork to util/command 2011-06-07 14:06:11 -04:00
pci.h pciResetDevice: use inactive devices to determine safe reset 2010-07-26 18:43:04 +02:00
processinfo.c build: update gnulib 2010-05-06 14:35:38 -06:00
processinfo.h build: consistently indent preprocessor directives 2010-03-09 19:22:28 +01:00
qparams.c qparams.c: do not skip va_end, twice 2010-02-19 11:52:04 +01:00
qparams.h build: consistently indent preprocessor directives 2010-03-09 19:22:28 +01:00
sexpr.c sexpr: Improve serialization error reporting 2011-05-27 15:31:33 +02:00
sexpr.h Use virBufferPtr for sexpr2string instead of manual buffer handling 2011-04-05 09:14:59 +02:00
stats_linux.c Update and sort msg_gen_function list and mark unmarked messages 2011-04-18 19:05:15 +02:00
stats_linux.h build: consistently indent preprocessor directives 2010-03-09 19:22:28 +01:00
storage_file.c storage: avoid mishandling backing store > 2GB 2011-06-08 05:18:46 -06:00
storage_file.h Put <stdbool.h> into internal.h so it is available everywhere 2011-02-24 12:04:06 +00:00
sysinfo.c Fix sysinfo/virsh build problems on Win32 2011-05-31 14:17:21 +01:00
sysinfo.h Add an API for comparing the ABI of two guest configurations 2011-05-31 12:14:55 +01:00
threadpool.c Put <stdbool.h> into internal.h so it is available everywhere 2011-02-24 12:04:06 +00:00
threadpool.h threadpool: allow NULL jobdata 2011-01-03 14:45:00 -07:00
threads-pthread.c threads: add one-time initialization support 2011-04-25 08:53:09 -06:00
threads-pthread.h threads: add one-time initialization support 2011-04-25 08:53:09 -06:00
threads-win32.c threads: add one-time initialization support 2011-04-25 08:53:09 -06:00
threads-win32.h threads: add one-time initialization support 2011-04-25 08:53:09 -06:00
threads.c build: avoid pthreads-win32 on mingw 2010-06-10 06:05:31 -06:00
threads.h threads: add one-time initialization support 2011-04-25 08:53:09 -06:00
util.c qemu: Faster response time to qemu startup errors 2011-06-13 15:59:58 -04:00
util.h Introduce virTimeMs for getting current time in ms 2011-06-13 11:20:16 +02:00
uuid.c bye to close(), welcome to VIR_(FORCE_)CLOSE() 2010-11-09 15:48:48 -05:00
uuid.h uuid: annotate non-null requirements 2011-06-08 05:28:20 -06:00
virtaudit.c audit: fix minor off-by-one 2011-05-26 11:17:55 -06:00
virtaudit.h Put <stdbool.h> into internal.h so it is available everywhere 2011-02-24 12:04:06 +00:00
virterror_internal.h Remove virConnectPtr from virRaiseErrorFull 2011-04-17 07:22:23 +02:00
virterror.c util: Cleanup indention problem in virterror.c 2011-06-14 15:03:12 +08:00
xml.c xml: Make sure virXpathNodeSet always sets an error 2011-05-13 10:32:52 -04:00
xml.h util: add missing string->integer conversion functions 2011-01-13 15:10:40 -07:00