Skip to content
Browse files

Untrack the connection before closing to avoid possible double-free

From Gangadharan S.A. Fixes issue #166.
  • Loading branch information...
1 parent 9f4b5b3 commit 889b1d826e9cf0ecbc9af938bad72937592af5e4 @dvarrazzo dvarrazzo committed Jun 20, 2013
Showing with 7 additions and 2 deletions.
  1. +2 −0 NEWS
  2. +5 −2 psycopg/connection_type.c
View
2 NEWS
@@ -5,6 +5,8 @@ What's new in psycopg 2.5.1
declared (:ticket:`#146`).
- Fixed comparison of `Range` with non-range objects (:ticket:`#164`).
Thanks to Chris Withers for the patch.
+- Fixed double-free on connection dealloc (:ticket:`#166`). Thanks to
+ Gangadharan S.A. for the report and fix suggestion.
What's new in psycopg 2.5
View
7 psycopg/connection_type.c
@@ -1128,10 +1128,13 @@ connection_dealloc(PyObject* obj)
{
connectionObject *self = (connectionObject *)obj;
- conn_close(self);
-
+ /* Make sure to untrack the connection before calling conn_close, which may
+ * allow a different thread to try and dealloc the connection again,
+ * resulting in a double-free segfault (ticket #166). */
PyObject_GC_UnTrack(self);
+ conn_close(self);
+
if (self->weakreflist) {
PyObject_ClearWeakRefs(obj);
}

0 comments on commit 889b1d8

Please sign in to comment.
Something went wrong with that request. Please try again.