瀏覽代碼

Avoid double finalization by GC (#269)

#268
Constantine Teplyakov 6 年之前
父節點
當前提交
46e35969a2
共有 1 個文件被更改,包括 3 次插入2 次删除
  1. 3 2
      libs/sqlite/sqlite.c

+ 3 - 2
libs/sqlite/sqlite.c

@@ -59,7 +59,7 @@ static void HL_NAME(finalize_request)(sqlite_result *r, bool exc ) {
 	r->bools = NULL;
 	r->bools = NULL;
 }
 }
 static void HL_NAME(finalize_result)(sqlite_result *r ) {
 static void HL_NAME(finalize_result)(sqlite_result *r ) {
-	if (r) HL_NAME(finalize_request)(r, false);
+	if (r && r->db) HL_NAME(finalize_request)(r, false);
 }
 }
 
 
 /**
 /**
@@ -72,9 +72,10 @@ HL_PRIM void HL_NAME(close)( sqlite_database *db ) {
 	if (sqlite3_close(db->db) != SQLITE_OK) {
 	if (sqlite3_close(db->db) != SQLITE_OK) {
 		// No exception : we shouldn't alloc memory in a finalizer anyway
 		// No exception : we shouldn't alloc memory in a finalizer anyway
 	}
 	}
+	db->db = NULL;
 }
 }
 static void HL_NAME(finalize_database)( sqlite_database *db ) {
 static void HL_NAME(finalize_database)( sqlite_database *db ) {
-	if (db) HL_NAME(close)(db);
+	if (db && db->db) HL_NAME(close)(db);
 }
 }