зеркало из https://github.com/mozilla/gecko-dev.git
Bug 938470 - Part 2: IPC actor should clone actors created on the parent side for the Nuwa process. r=bent
This commit is contained in:
Родитель
c26ba7e72d
Коммит
38d6789b0d
|
@ -3812,6 +3812,15 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
|
||||||
static=1))
|
static=1))
|
||||||
clonemanagees.addstmt(otherstmt)
|
clonemanagees.addstmt(otherstmt)
|
||||||
|
|
||||||
|
# Keep track of types created with an INOUT ctor. We need to call
|
||||||
|
# Register() or RegisterID() for them depending on the side the managee
|
||||||
|
# is created.
|
||||||
|
inoutCtorTypes = []
|
||||||
|
for msg in p.messageDecls:
|
||||||
|
msgtype = msg.decl.type
|
||||||
|
if msgtype.isCtor() and msgtype.isInout():
|
||||||
|
inoutCtorTypes.append(msgtype.constructedType())
|
||||||
|
|
||||||
actorvar = ExprVar('actor')
|
actorvar = ExprVar('actor')
|
||||||
for managee in p.managesStmts:
|
for managee in p.managesStmts:
|
||||||
block = StmtBlock()
|
block = StmtBlock()
|
||||||
|
@ -3827,6 +3836,19 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
|
||||||
init=Param(Type.UINT32, ivar.name, ExprLiteral.ZERO),
|
init=Param(Type.UINT32, ivar.name, ExprLiteral.ZERO),
|
||||||
cond=ExprBinary(ivar, '<', _callCxxArrayLength(kidsvar)),
|
cond=ExprBinary(ivar, '<', _callCxxArrayLength(kidsvar)),
|
||||||
update=ExprPrefixUnop(ivar, '++'))
|
update=ExprPrefixUnop(ivar, '++'))
|
||||||
|
|
||||||
|
registerstmt = StmtExpr(ExprCall(p.registerIDMethod(),
|
||||||
|
args=[actorvar, _actorId(actorvar)]))
|
||||||
|
# Implement if (actor id > 0) then Register() else RegisterID()
|
||||||
|
if manageeipdltype in inoutCtorTypes:
|
||||||
|
registerif = StmtIf(ExprBinary(_actorId(actorvar),
|
||||||
|
'>',
|
||||||
|
ExprLiteral.ZERO))
|
||||||
|
registerif.addifstmt(StmtExpr(ExprCall(p.registerMethod(),
|
||||||
|
args=[actorvar])))
|
||||||
|
registerif.addelsestmt(registerstmt)
|
||||||
|
registerstmt = registerif
|
||||||
|
|
||||||
forstmt.addstmts([
|
forstmt.addstmts([
|
||||||
StmtExpr(ExprAssn(
|
StmtExpr(ExprAssn(
|
||||||
actorvar,
|
actorvar,
|
||||||
|
@ -3847,8 +3869,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
|
||||||
p.channelForSubactor())),
|
p.channelForSubactor())),
|
||||||
StmtExpr(ExprAssn(_actorState(actorvar), _actorState(ithkid))),
|
StmtExpr(ExprAssn(_actorState(actorvar), _actorState(ithkid))),
|
||||||
StmtExpr(_callCxxArrayInsertSorted(manageearray, actorvar)),
|
StmtExpr(_callCxxArrayInsertSorted(manageearray, actorvar)),
|
||||||
StmtExpr(ExprCall(p.registerIDMethod(),
|
registerstmt,
|
||||||
args=[actorvar, _actorId(actorvar)])),
|
|
||||||
StmtExpr(ExprCall(
|
StmtExpr(ExprCall(
|
||||||
ExprSelect(actorvar,
|
ExprSelect(actorvar,
|
||||||
'->',
|
'->',
|
||||||
|
|
Загрузка…
Ссылка в новой задаче