WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] xenstore: Small cleanups and fixes.

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] xenstore: Small cleanups and fixes.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 27 Jul 2007 03:21:54 -0700
Delivery-date: Fri, 27 Jul 2007 03:19:56 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1185298128 -3600
# Node ID 68260372b6da5dfb0e32dfe26cc4a8ddbf0b3df0
# Parent  207582c8d88b532783da5c6f5839336187556f0a
xenstore: Small cleanups and fixes.
 1. readfd/writefd account for EINTR/EAGAIN errno returns.
 2. Handle zero return from ->read() and ->write() handlers
    symmetrically.
 3. Fix some indentation issues (use hard tabs).
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 tools/xenstore/xenstored_core.c   |   40 +++++++++++++++++++++++++++++---------
 tools/xenstore/xenstored_domain.c |    5 ++--
 tools/xenstore/xenstored_watch.c  |    5 +---
 3 files changed, 36 insertions(+), 14 deletions(-)

diff -r 207582c8d88b -r 68260372b6da tools/xenstore/xenstored_core.c
--- a/tools/xenstore/xenstored_core.c   Tue Jul 24 18:05:04 2007 +0100
+++ b/tools/xenstore/xenstored_core.c   Tue Jul 24 18:28:48 2007 +0100
@@ -1266,7 +1266,7 @@ static void handle_input(struct connecti
        if (in->inhdr) {
                bytes = conn->read(conn, in->hdr.raw + in->used,
                                   sizeof(in->hdr) - in->used);
-               if (bytes <= 0)
+               if (bytes < 0)
                        goto bad_client;
                in->used += bytes;
                if (in->used != sizeof(in->hdr))
@@ -1288,7 +1288,7 @@ static void handle_input(struct connecti
 
        bytes = conn->read(conn, in->buffer + in->used,
                           in->hdr.msg.len - in->used);
-       if (bytes <= 0)
+       if (bytes < 0)
                goto bad_client;
 
        in->used += bytes;
@@ -1341,12 +1341,34 @@ struct connection *new_connection(connwr
 
 static int writefd(struct connection *conn, const void *data, unsigned int len)
 {
-       return write(conn->fd, data, len);
+       int rc;
+
+       while ((rc = write(conn->fd, data, len)) < 0) {
+               if (errno == EAGAIN) {
+                       rc = 0;
+                       break;
+               }
+               if (errno != EINTR)
+                       break;
+       }
+
+       return rc;
 }
 
 static int readfd(struct connection *conn, void *data, unsigned int len)
 {
-       return read(conn->fd, data, len);
+       int rc;
+
+       while ((rc = read(conn->fd, data, len)) < 0) {
+               if (errno == EAGAIN) {
+                       rc = 0;
+                       break;
+               }
+               if (errno != EINTR)
+                       break;
+       }
+
+       return rc;
 }
 
 static void accept_connection(int sock, bool canwrite)
@@ -1439,13 +1461,13 @@ static unsigned int hash_from_key_fn(voi
 static unsigned int hash_from_key_fn(void *k)
 {
        char *str = k;
-        unsigned int hash = 5381;
-        char c;
-
-        while ((c = *str++))
+       unsigned int hash = 5381;
+       char c;
+
+       while ((c = *str++))
                hash = ((hash << 5) + hash) + (unsigned int)c;
 
-        return hash;
+       return hash;
 }
 
 
diff -r 207582c8d88b -r 68260372b6da tools/xenstore/xenstored_domain.c
--- a/tools/xenstore/xenstored_domain.c Tue Jul 24 18:05:04 2007 +0100
+++ b/tools/xenstore/xenstored_domain.c Tue Jul 24 18:28:48 2007 +0100
@@ -76,7 +76,6 @@ struct domain
 
 static LIST_HEAD(domains);
 
-/* FIXME: Mark connection as broken (close it?) when this happens. */
 static bool check_indexes(XENSTORE_RING_IDX cons, XENSTORE_RING_IDX prod)
 {
        return ((prod - cons) <= XENSTORE_RING_SIZE);
@@ -102,7 +101,8 @@ static const void *get_input_chunk(XENST
        return buf + MASK_XENSTORE_IDX(cons);
 }
 
-static int writechn(struct connection *conn, const void *data, unsigned int 
len)
+static int writechn(struct connection *conn,
+                   const void *data, unsigned int len)
 {
        uint32_t avail;
        void *dest;
@@ -113,6 +113,7 @@ static int writechn(struct connection *c
        cons = intf->rsp_cons;
        prod = intf->rsp_prod;
        mb();
+
        if (!check_indexes(cons, prod)) {
                errno = EIO;
                return -1;
diff -r 207582c8d88b -r 68260372b6da tools/xenstore/xenstored_watch.c
--- a/tools/xenstore/xenstored_watch.c  Tue Jul 24 18:05:04 2007 +0100
+++ b/tools/xenstore/xenstored_watch.c  Tue Jul 24 18:28:48 2007 +0100
@@ -73,11 +73,10 @@ static void add_event(struct connection 
        data = talloc_array(watch, char, len);
        strcpy(data, name);
        strcpy(data + strlen(name) + 1, watch->token);
-        send_reply(conn, XS_WATCH_EVENT, data, len);
+       send_reply(conn, XS_WATCH_EVENT, data, len);
        talloc_free(data);
 }
 
-/* FIXME: we fail to fire on out of memory.  Should drop connections. */
 void fire_watches(struct connection *conn, const char *name, bool recurse)
 {
        struct connection *i;
@@ -130,7 +129,7 @@ void do_watch(struct connection *conn, s
        /* Check for duplicates. */
        list_for_each_entry(watch, &conn->watches, list) {
                if (streq(watch->node, vec[0]) &&
-                    streq(watch->token, vec[1])) {
+                   streq(watch->token, vec[1])) {
                        send_error(conn, EEXIST);
                        return;
                }

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] xenstore: Small cleanups and fixes., Xen patchbot-unstable <=