mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-25 19:25:43 +00:00
fix for bug 8248. Not setting the VAL_IS_IFACE flag for purely out params when calling native from JS. All interfaces that return an interface (e.g. QueryInterface) were getting left with one extra ref. Yuck!
This commit is contained in:
parent
8f16f22564
commit
d5eb762653
@ -520,12 +520,18 @@ nsXPCWrappedNativeClass::CallWrappedMethod(JSContext* cx,
|
||||
dp->val.p = NULL;
|
||||
dispatchParamsInitedCount++;
|
||||
|
||||
if(type.TagPart() == nsXPTType::T_INTERFACE ||
|
||||
type.TagPart() == nsXPTType::T_INTERFACE_IS)
|
||||
{
|
||||
dp->flags |= nsXPTCVariant::VAL_IS_IFACE;
|
||||
}
|
||||
|
||||
// set 'src' to be the object from which we get the value and
|
||||
// prepare for out param
|
||||
|
||||
if(param.IsOut())
|
||||
{
|
||||
dp->flags = nsXPTCVariant::PTR_IS_DATA;
|
||||
dp->flags |= nsXPTCVariant::PTR_IS_DATA;
|
||||
dp->ptr = &dp->val;
|
||||
|
||||
if(!param.IsRetval() &&
|
||||
@ -558,8 +564,6 @@ nsXPCWrappedNativeClass::CallWrappedMethod(JSContext* cx,
|
||||
|
||||
if(type.TagPart() == nsXPTType::T_INTERFACE)
|
||||
{
|
||||
dp->flags |= nsXPTCVariant::VAL_IS_IFACE;
|
||||
|
||||
if(NS_FAILED(GetInterfaceInfo()->
|
||||
GetIIDForParam(¶m, &conditional_iid)))
|
||||
{
|
||||
@ -570,8 +574,6 @@ nsXPCWrappedNativeClass::CallWrappedMethod(JSContext* cx,
|
||||
}
|
||||
else if(type.TagPart() == nsXPTType::T_INTERFACE_IS)
|
||||
{
|
||||
dp->flags |= nsXPTCVariant::VAL_IS_IFACE;
|
||||
|
||||
uint8 arg_num = param.GetInterfaceIsArgNumber();
|
||||
const nsXPTParamInfo& param = info->GetParam(arg_num);
|
||||
const nsXPTType& type = param.GetType();
|
||||
|
Loading…
Reference in New Issue
Block a user