Index: gio/gio.override
===================================================================
--- gio/gio.override	(revision 931)
+++ gio/gio.override	(working copy)
@@ -45,6 +45,14 @@
 }
 
 static void
+pygio_free_notify(PyGIONotify *notify)
+{
+    Py_XDECREF(notify->callback);
+    Py_XDECREF(notify->data);
+    g_slice_free(PyGIONotify, notify);
+}
+
+static void
 async_result_callback_marshal(GObject *source_object,
 			      GAsyncResult *result,
 			      PyGIONotify *notify)
@@ -71,11 +79,8 @@
       }
 
     Py_XDECREF(ret);
+    pygio_free_notify(notify);
 
-    Py_DECREF(notify->callback);
-    Py_XDECREF(notify->data);
-    g_slice_free(PyGIONotify, notify);
-
     pyg_gil_state_release(state);
 }
 %%
Index: gio/gfile.override
===================================================================
--- gio/gfile.override	(revision 930)
+++ gio/gfile.override	(working copy)
@@ -33,12 +33,12 @@
     state = pyg_gil_state_ensure();
 
     if (notify->data)
-	ret = PyEval_CallFunction(notify->callback, "(kkO)",
-				  current_num_bytes,
-				  total_num_bytes,
-				  notify->data);
+	ret = PyObject_CallFunction(notify->callback, "(KKO)",
+				    current_num_bytes,
+				    total_num_bytes,
+				    notify->data);
     else
-	ret = PyObject_CallFunction(notify->callback, "(kk)",
+	ret = PyObject_CallFunction(notify->callback, "(KK)",
 				    current_num_bytes,
 				    total_num_bytes);
 
@@ -49,11 +49,6 @@
       }
 
     Py_XDECREF(ret);
-
-    Py_DECREF(notify->callback);
-    Py_XDECREF(notify->data);
-    g_slice_free(PyGIONotify, notify);
-    
     pyg_gil_state_release(state);
 }
 %%
@@ -577,6 +572,7 @@
 		      notify,
 		      &error);
 
+    pygio_free_notify(notify);
     if (pyg_error_check(&error))
         return NULL;
 
@@ -647,6 +643,7 @@
 		      notify,
 		      &error);
 
+    pygio_free_notify(notify);
     if (pyg_error_check(&error))
         return NULL;
 
