@@ -110,6 +110,8 @@ static bool njsDbObjectType_populateTypeInfo(njsDataTypeInfo *info,
110110 njsBaton * baton , napi_env env , dpiDataTypeInfo * sourceInfo );
111111static bool njsDbObject_wrap (napi_env env , napi_value value ,
112112 njsDbObject * * obj );
113+ static napi_value njsDbObjectType_refCleanup (napi_env env ,
114+ napi_callback_info info );
113115
114116
115117//-----------------------------------------------------------------------------
@@ -188,6 +190,7 @@ static void njsDbObject_finalize(napi_env env, void *finalizeData,
188190 dpiObject_release (obj -> handle );
189191 obj -> handle = NULL ;
190192 }
193+ obj -> type = NULL ;
191194 free (obj );
192195}
193196
@@ -877,6 +880,21 @@ static void njsDbObjectType_finalize(napi_env env, void *finalizeData,
877880 free (type );
878881}
879882
883+ //-----------------------------------------------------------------------------
884+ // njsDbObjectType_refCleanup()
885+ // Invoked when njsDbObjectType reference count needs to be decremented.
886+ // This is required for the clean up of obj type reference created
887+ // in njsDbObjectType_populate.
888+ //-----------------------------------------------------------------------------
889+ static napi_value njsDbObjectType_refCleanup (napi_env env ,
890+ napi_callback_info info )
891+ {
892+ njsDbObjectType * type ;
893+
894+ napi_get_cb_info (env , info , NULL , NULL , NULL , (void * * ) & type );
895+ NJS_DELETE_REF_AND_CLEAR (type -> jsDbObjectType );
896+ return NULL ;
897+ }
880898
881899//-----------------------------------------------------------------------------
882900// njsDbObjectType_populate()
@@ -995,6 +1013,11 @@ static bool njsDbObjectType_populate(njsDbObjectType *objType,
9951013 NJS_CHECK_NAPI (env , napi_set_named_property (env , jsObjectType ,
9961014 "isCollection" , temp ))
9971015
1016+ // cleanup function
1017+ NJS_CHECK_NAPI (env , napi_create_function (env , "refCleanup" , NAPI_AUTO_LENGTH ,
1018+ njsDbObjectType_refCleanup , objType , & temp ))
1019+ NJS_CHECK_NAPI (env , napi_set_named_property (env , jsObjectType , "refCleanup" ,
1020+ temp ))
9981021 return true;
9991022}
10001023
0 commit comments