X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=inline;f=Usermode%2FLibraries%2Flibspiderscript.so_src%2Fvalues.c;fp=Usermode%2FLibraries%2Flibspiderscript.so_src%2Fvalues.c;h=12e1bf0d92351803924bd067915b52c0abad4afd;hb=a18890d3ecb360989383d727017a21c103fee865;hp=f05360d4a2aa1443e2627ab3e7645c8481f0ceba;hpb=2acaad7b0d455a6c7cb177e1a7ecc5f07f40c7bb;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libspiderscript.so_src/values.c b/Usermode/Libraries/libspiderscript.so_src/values.c index f05360d4..12e1bf0d 100644 --- a/Usermode/Libraries/libspiderscript.so_src/values.c +++ b/Usermode/Libraries/libspiderscript.so_src/values.c @@ -32,13 +32,20 @@ void SpiderScript_DereferenceValue(tSpiderValue *Object) { if(!Object || Object == ERRPTR) return ; Object->ReferenceCount --; + if(Object->Type == SS_DATATYPE_OBJECT) { + } if( Object->ReferenceCount == 0 ) { switch( (enum eSpiderScript_DataTypes) Object->Type ) { case SS_DATATYPE_OBJECT: - Object->Object->Type->Destructor( Object->Object ); + Object->Object->ReferenceCount --; + if(Object->Object->ReferenceCount == 0) { + Object->Object->Type->Destructor( Object->Object ); + } + Object->Object = NULL; break; + case SS_DATATYPE_OPAQUE: Object->Opaque.Destroy( Object->Opaque.Data ); break; @@ -169,7 +176,7 @@ tSpiderValue *SpiderScript_CastValueTo(int Type, tSpiderValue *Source) // Check if anything needs to be done if( Source->Type == Type ) { - SpiderScript_DereferenceValue(Source); + SpiderScript_ReferenceValue(Source); return Source; }