Ticket #846: memleak-scriptableobject.patch

File memleak-scriptableobject.patch, 1.4 KB (added by Markus, 11 years ago)

Delete already existing property before adding new one.

  • trunk/source/scripting/ScriptableObject.h

    a b  
    320320    }
    321321    static void AddProperty( const CStrW& PropertyName, TGetFn Getter, TSetFn Setter = NULL )
    322322    {
     323        if (m_NativeProperties.count(PropertyName))
     324            delete m_NativeProperties[PropertyName];
     325
    323326        m_NativeProperties[PropertyName] = new CJSFunctionProperty( (GetFn)Getter, (SetFn)Setter );
    324327    }
    325328    template<typename ReturnType, ReturnType (T::*NativeFunction)( JSContext* cx, uintN argc, jsval* argv )>
     
    332335    {
    333336        IJSProperty* prop;
    334337        if( PropReadOnly )
    335         {
    336338            prop = new CJSProperty<PropType, true>( (PropType IJSObject::*)Native );
    337         }
    338339        else
    339         {
    340340            prop = new CJSProperty<PropType, ReadOnly>( (PropType IJSObject::*)Native );
    341         }
     341
     342        if (m_NativeProperties.count(PropertyName))
     343            delete m_NativeProperties[PropertyName];
     344
    342345        m_NativeProperties[PropertyName] = prop;
    343346    }
    344347#ifdef ALLOW_NONSHARED_NATIVES
     
    346349    {
    347350        IJSProperty* prop;
    348351        if( PropReadOnly )
    349         {
    350352            prop = new CJSNonsharedProperty<PropType, true>( Native );
    351         }
    352353        else
    353354            prop = new CJSNonsharedProperty<PropType, ReadOnly>( Native );
     355
     356        if (m_NonsharedProperties.count(PropertyName))
     357            delete m_NonsharedProperties[PropertyName];
     358
    354359        m_NonsharedProperties[PropertyName] = prop;
    355360    }
    356361#endif