mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 10:44:56 +00:00
Add a callback for top-level actors to free themselves. (bug 1285364, r=billm)
--HG-- extra : rebase_source : 6954a2b34b521c886fba536cd7bedd5f30b94763
This commit is contained in:
parent
23ad7ef04f
commit
6b2b817ec9
@ -2073,10 +2073,13 @@ MessageChannel::NotifyMaybeChannelError()
|
||||
return;
|
||||
}
|
||||
|
||||
Clear();
|
||||
|
||||
// Oops, error! Let the listener know about it.
|
||||
mChannelState = ChannelError;
|
||||
|
||||
// After this, the channel may be deleted.
|
||||
mListener->OnChannelError();
|
||||
Clear();
|
||||
}
|
||||
|
||||
void
|
||||
@ -2228,11 +2231,12 @@ MessageChannel::NotifyChannelClosed()
|
||||
if (ChannelClosed != mChannelState)
|
||||
NS_RUNTIMEABORT("channel should have been closed!");
|
||||
|
||||
// OK, the IO thread just closed the channel normally. Let the
|
||||
// listener know about it.
|
||||
mListener->OnChannelClose();
|
||||
|
||||
Clear();
|
||||
|
||||
// OK, the IO thread just closed the channel normally. Let the
|
||||
// listener know about it. After this point the channel may be
|
||||
// deleted.
|
||||
mListener->OnChannelClose();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -3243,6 +3243,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
|
||||
destroysubtreevar = ExprVar('DestroySubtree')
|
||||
deallocsubtreevar = ExprVar('DeallocSubtree')
|
||||
deallocshmemvar = ExprVar('DeallocShmems')
|
||||
deallocselfvar = ExprVar('Dealloc' + _actorName(ptype.name(), self.side))
|
||||
|
||||
# OnProcesingError(code)
|
||||
codevar = ExprVar('aCode')
|
||||
@ -3321,7 +3322,8 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
|
||||
StmtExpr(ExprCall(destroysubtreevar,
|
||||
args=[ _DestroyReason.NormalShutdown ])),
|
||||
StmtExpr(ExprCall(deallocsubtreevar)),
|
||||
StmtExpr(ExprCall(deallocshmemvar))
|
||||
StmtExpr(ExprCall(deallocshmemvar)),
|
||||
StmtExpr(ExprCall(deallocselfvar))
|
||||
])
|
||||
else:
|
||||
onclose.addstmt(
|
||||
@ -3335,7 +3337,8 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
|
||||
StmtExpr(ExprCall(destroysubtreevar,
|
||||
args=[ _DestroyReason.AbnormalShutdown ])),
|
||||
StmtExpr(ExprCall(deallocsubtreevar)),
|
||||
StmtExpr(ExprCall(deallocshmemvar))
|
||||
StmtExpr(ExprCall(deallocshmemvar)),
|
||||
StmtExpr(ExprCall(deallocselfvar))
|
||||
])
|
||||
else:
|
||||
onerror.addstmt(
|
||||
@ -3557,6 +3560,9 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
|
||||
])
|
||||
self.cls.addstmts([ deallocshmem, Whitespace.NL ])
|
||||
|
||||
deallocself = MethodDefn(MethodDecl(deallocselfvar.name, virtual=1))
|
||||
self.cls.addstmts([ deallocself, Whitespace.NL ])
|
||||
|
||||
self.implementPickling()
|
||||
|
||||
## private members
|
||||
|
Loading…
Reference in New Issue
Block a user