aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Limpach <Christian.Limpach@xensource.com>2006-10-12 11:26:07 +0100
committerChristian Limpach <Christian.Limpach@xensource.com>2006-10-12 11:26:07 +0100
commit5292dab2f06bb61236d0d6cc6fc0fec66e2607eb (patch)
treec94be2ac28af811496136d1f889404ac516ed983
parent88bea7620208b7e19ab417a597c190486ecc1336 (diff)
downloadxen-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>
-rw-r--r--tools/xenstore/xenstore_client.c21
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;