@@ -181,7 +181,10 @@ MsiDatabaseCommit(MSIHANDLE hDatabase)
181181 return ERROR_INVALID_HANDLE ;
182182
183183 GError * error = NULL ;
184- if (!libmsi_database_commit (db , & error ))
184+ gboolean ok = libmsi_database_commit (db , & error );
185+ g_object_unref (db );
186+
187+ if (!ok )
185188 return gerror_to_msi (error );
186189
187190 return ERROR_SUCCESS ;
@@ -198,10 +201,9 @@ MsiGetDatabaseState(MSIHANDLE hDatabase)
198201 if (!db )
199202 return MSIDBSTATE_ERROR ;
200203
201- if (libmsi_database_is_readonly (db ))
202- return MSIDBSTATE_READ ;
203-
204- return MSIDBSTATE_WRITE ;
204+ MSIDBSTATE ret = libmsi_database_is_readonly (db ) ? MSIDBSTATE_READ : MSIDBSTATE_WRITE ;
205+ g_object_unref (db );
206+ return ret ;
205207}
206208
207209/* -------------------------------------------------------------------------- */
@@ -220,6 +222,8 @@ MsiDatabaseGetPrimaryKeysA(MSIHANDLE hDatabase, LPCSTR szTableName, MSIHANDLE *p
220222
221223 GError * error = NULL ;
222224 LibmsiRecord * rec = libmsi_database_get_primary_keys (db , szTableName , & error );
225+ g_object_unref (db );
226+
223227 if (!rec )
224228 return gerror_to_msi (error );
225229
@@ -264,6 +268,8 @@ MsiDatabaseIsTablePersistentA(MSIHANDLE hDatabase, LPCSTR szTableName)
264268
265269 GError * error = NULL ;
266270 gboolean persistent = libmsi_database_is_table_persistent (db , szTableName , & error );
271+ g_object_unref (db );
272+
267273 if (error ) {
268274 g_error_free (error );
269275 return MSICONDITION_ERROR ;
@@ -307,6 +313,7 @@ MsiDatabaseImportA(MSIHANDLE hDatabase, LPCSTR szFolderPath, LPCSTR szFileName)
307313 GError * error = NULL ;
308314 gboolean ok = libmsi_database_import (db , full_path , & error );
309315 g_free (full_path );
316+ g_object_unref (db );
310317
311318 if (!ok )
312319 return gerror_to_msi (error );
@@ -360,8 +367,10 @@ MsiDatabaseExportA(MSIHANDLE hDatabase, LPCSTR szTableName, LPCSTR szFolderPath,
360367#endif
361368 g_free (full_path );
362369
363- if (fd < 0 )
370+ if (fd < 0 ) {
371+ g_object_unref (db );
364372 return ERROR_FUNCTION_FAILED ;
373+ }
365374
366375 GError * error = NULL ;
367376 gboolean ok = libmsi_database_export (db , szTableName , fd , & error );
@@ -372,6 +381,8 @@ MsiDatabaseExportA(MSIHANDLE hDatabase, LPCSTR szTableName, LPCSTR szFolderPath,
372381 close (fd );
373382#endif
374383
384+ g_object_unref (db );
385+
375386 if (!ok )
376387 return gerror_to_msi (error );
377388
@@ -415,11 +426,17 @@ MsiDatabaseMergeA(MSIHANDLE hDatabase, MSIHANDLE hDatabaseMerge, LPCSTR szTableN
415426 return ERROR_INVALID_HANDLE ;
416427
417428 LibmsiDatabase * db_merge = (LibmsiDatabase * )handle_table_get_typed (hDatabaseMerge , HANDLE_DATABASE );
418- if (!db_merge )
429+ if (!db_merge ) {
430+ g_object_unref (db );
419431 return ERROR_INVALID_HANDLE ;
432+ }
420433
421434 GError * error = NULL ;
422- if (!libmsi_database_merge (db , db_merge , szTableName , & error ))
435+ gboolean ok = libmsi_database_merge (db , db_merge , szTableName , & error );
436+ g_object_unref (db );
437+ g_object_unref (db_merge );
438+
439+ if (!ok )
423440 return gerror_to_msi (error );
424441
425442 return ERROR_SUCCESS ;
@@ -457,7 +474,10 @@ MsiDatabaseApplyTransformA(MSIHANDLE hDatabase, LPCSTR szTransformFile,
457474 return ERROR_INVALID_HANDLE ;
458475
459476 GError * error = NULL ;
460- if (!libmsi_database_apply_transform (db , szTransformFile , & error ))
477+ gboolean ok = libmsi_database_apply_transform (db , szTransformFile , & error );
478+ g_object_unref (db );
479+
480+ if (!ok )
461481 return gerror_to_msi (error );
462482
463483 return ERROR_SUCCESS ;
0 commit comments