diff options
author | Christian Limpach <Christian.Limpach@xensource.com> | 2006-10-12 11:26:07 +0100 |
---|---|---|
committer | Christian Limpach <Christian.Limpach@xensource.com> | 2006-10-12 11:26:07 +0100 |
commit | 5292dab2f06bb61236d0d6cc6fc0fec66e2607eb (patch) | |
tree | c94be2ac28af811496136d1f889404ac516ed983 /tools/xenstore/xenstore_client.c | |
parent | 88bea7620208b7e19ab417a597c190486ecc1336 (diff) | |
download | xen-5292dab2f06bb61236d0d6cc6fc0fec66e2607eb.tar.gz xen-5292dab2f06bb61236d0d6cc6fc0fec66e2607eb.tar.bz2 xen-5292dab2f06bb61236d0d6cc6fc0fec66e2607eb.zip |
[xenstore] Don't create a transaction for singleton read/write operations.
Signed-off-by: Christian Limpach <Christian.Limpach@xensource.com>
Diffstat (limited to 'tools/xenstore/xenstore_client.c')
-rw-r--r-- | tools/xenstore/xenstore_client.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/tools/xenstore/xenstore_client.c b/tools/xenstore/xenstore_client.c index 811c6acb6a..c34dcbfc70 100644 --- a/tools/xenstore/xenstore_client.c +++ b/tools/xenstore/xenstore_client.c @@ -267,12 +267,13 @@ int main(int argc, char **argv) { struct xs_handle *xsh; - xs_transaction_t xth; + xs_transaction_t xth = XBT_NULL; int ret = 0, socket = 0; int prefix = 0; int tidy = 0; int upto = 0; int recurse = 0; + int transaction; while (1) { int c, index = 0; @@ -339,18 +340,28 @@ main(int argc, char **argv) } #endif +#if defined(CLIENT_read) + transaction = (argc - optind) > 1; +#elif defined(CLIENT_write) + transaction = (argc - optind) > 2; +#else + transaction = 1; +#endif + xsh = socket ? xs_daemon_open() : xs_domain_open(); if (xsh == NULL) err(1, socket ? "xs_daemon_open" : "xs_domain_open"); again: - xth = xs_transaction_start(xsh); - if (xth == XBT_NULL) - errx(1, "couldn't start transaction"); + if (transaction) { + xth = xs_transaction_start(xsh); + if (xth == XBT_NULL) + errx(1, "couldn't start transaction"); + } ret = perform(optind, argc, argv, xsh, xth, prefix, tidy, upto, recurse); - if (!xs_transaction_end(xsh, xth, ret)) { + if (transaction && !xs_transaction_end(xsh, xth, ret)) { if (ret == 0 && errno == EAGAIN) { output_pos = 0; goto again; |