[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] Make error reporting consistent.



# HG changeset patch
# User cl349@xxxxxxxxxxxxxxxxxxxx
# Node ID 4856f000d35d6be0bfb6f5c822e91e9ef7fc885e
# Parent  cdfa7dd00c44eaa68b56656d236df5a60df17cf7
Make error reporting consistent.
Also note addition of Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS
which slipped in in previous merge changeset:  allow other threads
to run during communication with xenstored.
Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>

diff -r cdfa7dd00c44 -r 4856f000d35d tools/python/xen/lowlevel/xs/xs.c
--- a/tools/python/xen/lowlevel/xs/xs.c Fri Sep  9 10:20:25 2005
+++ b/tools/python/xen/lowlevel/xs/xs.c Fri Sep  9 13:08:25 2005
@@ -89,7 +89,7 @@
     PyObject *val = NULL;
 
     if (!xh)
-       goto exit;
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec,
                                      &path))
         goto exit;
@@ -97,13 +97,13 @@
     xsval = xs_read(xh, path, &xsval_n);
     Py_END_ALLOW_THREADS
     if (!xsval) {
-        val = pyvalue_int(0);
+        PyErr_SetFromErrno(PyExc_RuntimeError);
         goto exit;
     }
     val = PyString_FromStringAndSize(xsval, xsval_n);
  exit:
     if (xsval)
-       free(xsval);
+        free(xsval);
     return val;
 }
 
@@ -114,7 +114,7 @@
        " create [int]    : create flag, default 0.\n"          \
        " excl   [int]    : exclusive flag, default 0.\n"       \
        "\n"                                                    \
-       "Returns: [int] 0 on success.\n"                        \
+       "Returns None on success.\n"                            \
        "Raises RuntimeError on error.\n"                       \
        "\n"
 
@@ -134,18 +134,23 @@
     int xsval = 0;
 
     if (!xh)
-       goto exit;
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec,
                                      &path, &data, &data_n, &create, &excl))
         goto exit;
     if (create)
-       flags |= O_CREAT;
+        flags |= O_CREAT;
     if (excl)
-       flags |= O_EXCL;
+        flags |= O_EXCL;
     Py_BEGIN_ALLOW_THREADS
     xsval = xs_write(xh, path, data, data_n, flags);
     Py_END_ALLOW_THREADS
-    val = pyvalue_int(xsval);
+    if (!xsval) {
+        PyErr_SetFromErrno(PyExc_RuntimeError);
+        goto exit;
+    }
+    Py_INCREF(Py_None);
+    val = Py_None;
  exit:
     return val;
 }
@@ -171,14 +176,14 @@
     int i;
 
     if (!xh)
-       goto exit;
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec, &path))
         goto exit;
     Py_BEGIN_ALLOW_THREADS
     xsval = xs_directory(xh, path, &xsval_n);
     Py_END_ALLOW_THREADS
     if (!xsval) {
-        val = pyvalue_int(0);
+        PyErr_SetFromErrno(PyExc_RuntimeError);
         goto exit;
     }
     val = PyList_New(xsval_n);
@@ -192,7 +197,7 @@
        "Make a directory.\n"                                   \
        " path [string]: path to directory to create.\n"        \
        "\n"                                                    \
-       "Returns: [int] 0 on success.\n"                        \
+       "Returns None on success.\n"                            \
        "Raises RuntimeError on error.\n"                       \
        "\n"
 
@@ -207,13 +212,18 @@
     int xsval = 0;
 
     if (!xh)
-       goto exit;
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec, &path))
         goto exit;
     Py_BEGIN_ALLOW_THREADS
     xsval = xs_mkdir(xh, path);
     Py_END_ALLOW_THREADS
-    val = pyvalue_int(xsval);
+    if (!xsval) {
+        PyErr_SetFromErrno(PyExc_RuntimeError);
+        goto exit;
+    }
+    Py_INCREF(Py_None);
+    val = Py_None;
  exit:
     return val;
 }
@@ -222,7 +232,7 @@
        "Remove a path.\n"                      \
        " path [string] : path to remove\n"     \
        "\n"                                    \
-       "Returns: [int] 0 on success.\n"        \
+       "Returns None on success.\n"            \
        "Raises RuntimeError on error.\n"       \
        "\n"
 
@@ -237,13 +247,18 @@
     int xsval = 0;
 
     if (!xh)
-       goto exit;
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec, &path))
         goto exit;
     Py_BEGIN_ALLOW_THREADS
     xsval = xs_rm(xh, path);
     Py_END_ALLOW_THREADS
-    val = pyvalue_int(xsval);
+    if (!xsval) {
+        PyErr_SetFromErrno(PyExc_RuntimeError);
+        goto exit;
+    }
+    Py_INCREF(Py_None);
+    val = Py_None;
  exit:
     return val;
 }
@@ -257,7 +272,7 @@
        "\n"
 
 static PyObject *xspy_get_permissions(PyObject *self, PyObject *args,
-                                     PyObject *kwds)
+                                      PyObject *kwds)
 {
     static char *kwd_spec[] = { "path", NULL };
     static char *arg_spec = "s|";
@@ -270,7 +285,7 @@
     int i;
 
     if (!xh)
-       goto exit;
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec, &path))
         goto exit;
     Py_BEGIN_ALLOW_THREADS
@@ -297,12 +312,12 @@
        " path  [string] : xenstore path.\n"    \
        " perms          : permissions.\n"      \
        "\n"                                    \
-       "Returns: [int] 0 on success.\n"        \
+       "Returns None on success.\n"            \
        "Raises RuntimeError on error.\n"       \
        "\n"
 
 static PyObject *xspy_set_permissions(PyObject *self, PyObject *args,
-                                     PyObject *kwds)
+                                      PyObject *kwds)
 {
     static char *kwd_spec[] = { "path", "perms", NULL };
     static char *arg_spec = "sO";
@@ -335,7 +350,7 @@
     }
     tuple0 = PyTuple_New(0);
     if (!tuple0)
-       goto exit;
+        goto exit;
     for (i = 0; i < xsperms_n; i++) {
         /* Domain the permissions apply to. */
         int dom = 0;
@@ -343,22 +358,27 @@
         int p_read = 0, p_write = 0;
         PyObject *p = PyList_GetItem(perms, i);
         if (!PyArg_ParseTupleAndKeywords(tuple0, p, perm_spec, perm_names,
-                                        &dom, &p_read, &p_write))
+                                         &dom, &p_read, &p_write))
             goto exit;
         xsperms[i].id = dom;
         if (p_read)
-           xsperms[i].perms |= XS_PERM_READ;
+            xsperms[i].perms |= XS_PERM_READ;
         if (p_write)
-           xsperms[i].perms |= XS_PERM_WRITE;
+            xsperms[i].perms |= XS_PERM_WRITE;
     }
     Py_BEGIN_ALLOW_THREADS
     xsval = xs_set_permissions(xh, path, xsperms, xsperms_n);
     Py_END_ALLOW_THREADS
-    val = pyvalue_int(xsval);
+    if (!xsval) {
+        PyErr_SetFromErrno(PyExc_RuntimeError);
+        goto exit;
+    }
+    Py_INCREF(Py_None);
+    val = Py_None;
  exit:
     Py_XDECREF(tuple0);
     if (xsperms)
-       free(xsperms);
+        free(xsperms);
     return val;
 }
 
@@ -389,7 +409,7 @@
     int xsval = 0;
 
     if (!xh)
-       goto exit;
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec, 
                                      &path, &token))
         goto exit;
@@ -399,19 +419,19 @@
     xsval = xs_watch(xh, path, token_str);
     Py_END_ALLOW_THREADS
     if (!xsval) {
-       val = PyErr_SetFromErrno(PyExc_RuntimeError);
-       Py_DECREF(token);
-       goto exit;
+        PyErr_SetFromErrno(PyExc_RuntimeError);
+        Py_DECREF(token);
+        goto exit;
     }
 
     for (i = 0; i < PyList_Size(xsh->watches); i++) {
-       if (PyList_GetItem(xsh->watches, i) == Py_None) {
-           PyList_SetItem(xsh->watches, i, token);
-           break;
-       }
+        if (PyList_GetItem(xsh->watches, i) == Py_None) {
+            PyList_SetItem(xsh->watches, i, token);
+            break;
+        }
     }
     if (i == PyList_Size(xsh->watches))
-       PyList_Append(xsh->watches, token);
+        PyList_Append(xsh->watches, token);
     Py_INCREF(Py_None);
     val = Py_None;
  exit:
@@ -429,7 +449,7 @@
        "\n"
 
 static PyObject *xspy_read_watch(PyObject *self, PyObject *args,
-                                PyObject *kwds)
+                                 PyObject *kwds)
 {
     static char *kwd_spec[] = { NULL };
     static char *arg_spec = "";
@@ -442,33 +462,33 @@
     int i;
 
     if (!xh)
-       goto exit;
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec))
         goto exit;
     Py_BEGIN_ALLOW_THREADS
     xsval = xs_read_watch(xh);
     Py_END_ALLOW_THREADS
     if (!xsval) {
-       val = PyErr_SetFromErrno(PyExc_RuntimeError);
-       goto exit;
+        PyErr_SetFromErrno(PyExc_RuntimeError);
+        goto exit;
     }
     if (sscanf(xsval[1], "%li", (unsigned long *)&token) != 1) {
-       PyErr_SetString(PyExc_RuntimeError, "invalid token");
-       goto exit;
+        PyErr_SetString(PyExc_RuntimeError, "invalid token");
+        goto exit;
     }
     for (i = 0; i < PyList_Size(xsh->watches); i++) {
-       if (token == PyList_GetItem(xsh->watches, i))
-           break;
+        if (token == PyList_GetItem(xsh->watches, i))
+            break;
     }
     if (i == PyList_Size(xsh->watches)) {
-       PyErr_SetString(PyExc_RuntimeError, "invalid token");
-       goto exit;
+        PyErr_SetString(PyExc_RuntimeError, "invalid token");
+        goto exit;
     }
     /* Create tuple (path, token). */
     val = Py_BuildValue("(sO)", xsval[0], token);
  exit:
     if (xsval)
-       free(xsval);
+        free(xsval);
     return val;
 }
 
@@ -481,7 +501,7 @@
        "\n"
 
 static PyObject *xspy_acknowledge_watch(PyObject *self, PyObject *args,
-                                       PyObject *kwds)
+                                        PyObject *kwds)
 {
     static char *kwd_spec[] = { "token", NULL };
     static char *arg_spec = "O";
@@ -493,7 +513,7 @@
     int xsval = 0;
 
     if (!xh)
-       goto exit;
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec, &token))
         goto exit;
     sprintf(token_str, "%li", (unsigned long)token);
@@ -501,8 +521,8 @@
     xsval = xs_acknowledge_watch(xh, token_str);
     Py_END_ALLOW_THREADS
     if (!xsval) {
-       val = PyErr_SetFromErrno(PyExc_RuntimeError);
-       goto exit;
+        PyErr_SetFromErrno(PyExc_RuntimeError);
+        goto exit;
     }
     Py_INCREF(Py_None);
     val = Py_None;
@@ -534,26 +554,26 @@
     int xsval = 0;
 
     if (!xh)
-       goto exit;
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec, &path,
-                                    &token))
+                                     &token))
         goto exit;
     sprintf(token_str, "%li", (unsigned long)token);
     Py_BEGIN_ALLOW_THREADS
     xsval = xs_unwatch(xh, path, token_str);
     Py_END_ALLOW_THREADS
     if (!xsval)
-       val = PyErr_SetFromErrno(PyExc_RuntimeError);
+        PyErr_SetFromErrno(PyExc_RuntimeError);
     else {
-       Py_INCREF(Py_None);
-       val = Py_None;
+        Py_INCREF(Py_None);
+        val = Py_None;
     }
     for (i = 0; i < PyList_Size(xsh->watches); i++) {
-       if (token == PyList_GetItem(xsh->watches, i)) {
-           Py_INCREF(Py_None);
-           PyList_SetItem(xsh->watches, i, Py_None);
-           break;
-       }
+        if (token == PyList_GetItem(xsh->watches, i)) {
+            Py_INCREF(Py_None);
+            PyList_SetItem(xsh->watches, i, Py_None);
+            break;
+        }
     }
  exit:
     return val;
@@ -564,12 +584,12 @@
        "Only one transaction can be active at a time.\n"       \
        " path [string]: xenstore path.\n"                      \
        "\n"                                                    \
-       "Returns: [int] 0 on success.\n"                        \
+       "Returns None on success.\n"                            \
        "Raises RuntimeError on error.\n"                       \
        "\n"
 
 static PyObject *xspy_transaction_start(PyObject *self, PyObject *args,
-                                       PyObject *kwds)
+                                        PyObject *kwds)
 {
     static char *kwd_spec[] = { "path", NULL };
     static char *arg_spec = "s|";
@@ -580,13 +600,18 @@
     int xsval = 0;
 
     if (!xh)
-       goto exit;
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec, &path))
         goto exit;
     Py_BEGIN_ALLOW_THREADS
     xsval = xs_transaction_start(xh, path);
     Py_END_ALLOW_THREADS
-    val = pyvalue_int(xsval);
+    if (!xsval) {
+        PyErr_SetFromErrno(PyExc_RuntimeError);
+        goto exit;
+    }
+    Py_INCREF(Py_None);
+    val = Py_None;
  exit:
     return val;
 }
@@ -596,12 +621,12 @@
        "Attempts to commit the transaction unless abort is true.\n"    \
        " abort [int]: abort flag (default 0).\n"                       \
        "\n"                                                            \
-       "Returns: [int] 0 on success.\n"                                \
+       "Returns None on success.\n"                                    \
        "Raises RuntimeError on error.\n"                               \
        "\n"
 
 static PyObject *xspy_transaction_end(PyObject *self, PyObject *args,
-                                     PyObject *kwds)
+                                      PyObject *kwds)
 {
     static char *kwd_spec[] = { "abort", NULL };
     static char *arg_spec = "|i";
@@ -612,13 +637,18 @@
     int xsval = 0;
 
     if (!xh)
-       goto exit;
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec, &abort))
         goto exit;
     Py_BEGIN_ALLOW_THREADS
     xsval = xs_transaction_end(xh, abort);
     Py_END_ALLOW_THREADS
-    val = pyvalue_int(xsval);
+    if (!xsval) {
+        PyErr_SetFromErrno(PyExc_RuntimeError);
+        goto exit;
+    }
+    Py_INCREF(Py_None);
+    val = Py_None;
  exit:
     return val;
 }
@@ -630,12 +660,12 @@
        " port [int]   : port the domain is using for xenstore\n"       \
        " path [string]: path to the domain's data in xenstore\n"       \
        "\n"                                                            \
-       "Returns: [int] 0 on success.\n"                                \
+       "Returns None on success.\n"                                    \
        "Raises RuntimeError on error.\n"                               \
        "\n"
 
 static PyObject *xspy_introduce_domain(PyObject *self, PyObject *args,
-                                      PyObject *kwds)
+                                       PyObject *kwds)
 {
     static char *kwd_spec[] = { "dom", "page", "port", "path", NULL };
     static char *arg_spec = "iiis|";
@@ -649,14 +679,19 @@
     int xsval = 0;
 
     if (!xh)
-       goto exit;
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec,
                                      &dom, &page, &port, &path))
         goto exit;
     Py_BEGIN_ALLOW_THREADS
     xsval = xs_introduce_domain(xh, dom, page, port, path);
     Py_END_ALLOW_THREADS
-    val = pyvalue_int(xsval);
+    if (!xsval) {
+        PyErr_SetFromErrno(PyExc_RuntimeError);
+        goto exit;
+    }
+    Py_INCREF(Py_None);
+    val = Py_None;
  exit:
     return val;
 }
@@ -666,12 +701,12 @@
        "Unless this is done the domain will not be released.\n"        \
        " dom [int]: domain id\n"                                       \
        "\n"                                                            \
-       "Returns: [int] 0 on success.\n"                                \
+       "Returns None on success.\n"                                    \
        "Raises RuntimeError on error.\n"                               \
        "\n"
 
 static PyObject *xspy_release_domain(PyObject *self, PyObject *args,
-                                    PyObject *kwds)
+                                     PyObject *kwds)
 {
     static char *kwd_spec[] = { "dom", NULL };
     static char *arg_spec = "i|";
@@ -682,14 +717,19 @@
     int xsval = 0;
 
     if (!xh)
-       goto exit;
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec,
                                      &dom))
         goto exit;
     Py_BEGIN_ALLOW_THREADS
     xsval = xs_release_domain(xh, dom);
     Py_END_ALLOW_THREADS
-    val = pyvalue_int(xsval);
+    if (!xsval) {
+        PyErr_SetFromErrno(PyExc_RuntimeError);
+        goto exit;
+    }
+    Py_INCREF(Py_None);
+    val = Py_None;
  exit:
     return val;
 }
@@ -697,7 +737,7 @@
 #define xspy_close_doc "\n"                    \
        "Close the connection to xenstore.\n"   \
        "\n"                                    \
-       "Returns: [int] 0 on success.\n"        \
+       "Returns None on success.\n"            \
        "Raises RuntimeError on error.\n"       \
        "\n"
 
@@ -710,20 +750,20 @@
     XsHandle *xsh = (XsHandle *)self;
     struct xs_handle *xh = xshandle(self);
     PyObject *val = NULL;
-    int xsval = 1;
-
-    if (!xh)
-       goto exit;
+
+    if (!xh)
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec))
         goto exit;
     for (i = 0; i < PyList_Size(xsh->watches); i++) {
-       /* TODO: xs_unwatch watches */
-       Py_INCREF(Py_None);
-       PyList_SetItem(xsh->watches, i, Py_None);
+        /* TODO: xs_unwatch watches */
+        Py_INCREF(Py_None);
+        PyList_SetItem(xsh->watches, i, Py_None);
     }
     xs_daemon_close(xh);
     xsh->xh = NULL;
-    val = pyvalue_int(xsval);
+    Py_INCREF(Py_None);
+    val = Py_None;
  exit:
     return val;
 }
@@ -731,7 +771,7 @@
 #define xspy_shutdown_doc "\n"                 \
        "Shutdown the xenstore daemon.\n"       \
        "\n"                                    \
-       "Returns: [int] 0 on success.\n"        \
+       "Returns None on success.\n"            \
        "Raises RuntimeError on error.\n"       \
        "\n"
 
@@ -745,13 +785,18 @@
     int xsval = 0;
 
     if (!xh)
-       goto exit;
+        goto exit;
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec))
         goto exit;
     Py_BEGIN_ALLOW_THREADS
     xsval = xs_shutdown(xh);
     Py_END_ALLOW_THREADS
-    val = pyvalue_int(xsval);
+    if (!xsval) {
+        PyErr_SetFromErrno(PyExc_RuntimeError);
+        goto exit;
+    }
+    Py_INCREF(Py_None);
+    val = Py_None;
  exit:
     return val;
 }
@@ -852,17 +897,18 @@
 
     if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec,
                                      &readonly))
-       return NULL;
+        return NULL;
 
     xsh = PyObject_New(XsHandle, &xshandle_type);
     if (!xsh)
-       return NULL;
+        return NULL;
     xsh->watches = PyList_New(0);
     if (!xsh->watches)
-       goto exit;
+        goto exit;
     xsh->xh = (readonly ? xs_daemon_open_readonly() : xs_daemon_open());
     if (!xsh->xh) {
-       Py_DECREF(xsh->watches);
+        Py_DECREF(xsh->watches);
+        PyErr_SetFromErrno(PyExc_RuntimeError);
         goto exit;
     }
     val = (PyObject *)xsh;

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.