Merged revisions 67797 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r67797 | amaury.forgeotdarc | 2008-12-15 22:47:57 +0100 (Mon, 15 Dec 2008) | 4 lines

  #3954: Fix error handling code in _hotshot.logreader

  Will port to 2.6. hotshot was deleted from python 3.
........
diff --git a/Modules/_hotshot.c b/Modules/_hotshot.c
index 4c66e2a..a36cd50 100644
--- a/Modules/_hotshot.c
+++ b/Modules/_hotshot.c
@@ -1357,20 +1357,16 @@
             self->logfp = fopen(filename, "rb");
             if (self->logfp == NULL) {
                 PyErr_SetFromErrnoWithFilename(PyExc_IOError, filename);
-                Py_DECREF(self);
-                self = NULL;
-                goto finally;
+                goto error;
             }
             self->info = PyDict_New();
-            if (self->info == NULL) {
-                Py_DECREF(self);
-                goto finally;
-            }
+            if (self->info == NULL)
+                goto error;
             /* read initial info */
             for (;;) {
                 if ((c = fgetc(self->logfp)) == EOF) {
                     eof_error(self);
-                    break;
+                    goto error;
                 }
                 if (c != WHAT_ADD_INFO) {
                     ungetc(c, self->logfp);
@@ -1383,13 +1379,15 @@
                     else
                         PyErr_SetString(PyExc_RuntimeError,
                                         "unexpected error");
-                    break;
+                    goto error;
                 }
             }
         }
     }
- finally:
     return (PyObject *) self;
+  error:
+    Py_DECREF(self);
+    return NULL;
 }