diff --git a/mozilla/xpcom/reflect/xptinfo/src/xptiInterfaceInfo.cpp b/mozilla/xpcom/reflect/xptinfo/src/xptiInterfaceInfo.cpp index 53794c7266a..030566a20df 100644 --- a/mozilla/xpcom/reflect/xptinfo/src/xptiInterfaceInfo.cpp +++ b/mozilla/xpcom/reflect/xptinfo/src/xptiInterfaceInfo.cpp @@ -82,6 +82,19 @@ xptiInterfaceInfo::~xptiInterfaceInfo() delete mInterface; } +void +xptiInterfaceInfo::Invalidate() +{ + if(IsValid()) + { + // The order of operations here is important! + xptiTypelib typelib = GetTypelibRecord(); + if(HasInterfaceRecord()) + delete mInterface; + mTypelib = typelib; + mName = nsnull; + } +} PRBool xptiInterfaceInfo::Resolve(xptiWorkingSet* aWorkingSet /* = nsnull */) diff --git a/mozilla/xpcom/reflect/xptinfo/src/xptiprivate.h b/mozilla/xpcom/reflect/xptinfo/src/xptiprivate.h index e8de024c421..422c7a25b4f 100644 --- a/mozilla/xpcom/reflect/xptinfo/src/xptiprivate.h +++ b/mozilla/xpcom/reflect/xptinfo/src/xptiprivate.h @@ -487,15 +487,7 @@ public: PRBool PartiallyResolveLocked(XPTInterfaceDescriptor* aDescriptor, xptiWorkingSet* aWorkingSet); - void Invalidate() - { - if(IsValid()) - { - xptiTypelib typelib = GetTypelibRecord(); - mTypelib = typelib; - mName = nsnull; - } - } + void Invalidate(); private: void CopyName(const char* name,