From c2a3a79571a799c315091c8ce045b7a4d3bb0d1b Mon Sep 17 00:00:00 2001 From: Benoit Jacob Date: Tue, 25 Feb 2014 08:57:10 -0500 Subject: [PATCH] Bug 968244 - Make IPDL-generated code not crash on bad shmems - r=bent --- ipc/ipdl/ipdl/lower.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/ipc/ipdl/ipdl/lower.py b/ipc/ipdl/ipdl/lower.py index dcfac3ca8903..39ee2b2fe223 100644 --- a/ipc/ipdl/ipdl/lower.py +++ b/ipc/ipdl/ipdl/lower.py @@ -4035,8 +4035,10 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): # bool AdoptShmem(const Shmem& mem, Shmem* outmem): # SharedMemory* raw = mem.mSegment; - # if (!raw || IsTrackingSharedMemory(raw)) - # RUNTIMEABORT() + # if (!raw || IsTrackingSharedMemory(raw)) { + # NS_WARNING("bad Shmem"); // or NS_RUNTIMEABORT on child side + # return false; + # } # id_t id # if (!AdoptSharedMemory(raw, &id)) # return false @@ -4053,7 +4055,14 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): ifbad = StmtIf(ExprBinary( ExprNot(rawvar), '||', ExprCall(ExprVar('IsTrackingSharedMemory'), args=[ rawvar ]))) - ifbad.addifstmt(_runtimeAbort('bad Shmem')) + badShmemActions = [] + if (self.side == 'child'): + badShmemActions.append(_runtimeAbort('bad Shmem')); + else: + badShmemActions.append(_printWarningMessage('bad Shmem')); + badShmemActions.append(StmtReturn.FALSE); + ifbad.addifstmts(badShmemActions) + adoptShmem.addstmt(ifbad) ifadoptfails = StmtIf(ExprNot(ExprCall( @@ -4074,7 +4083,8 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): # bool ok = DestroySharedMemory(mem); ##ifdef DEBUG # if (!ok) { - # NS_RUNTIMEABORT("bad Shmem"); + # NS_WARNING("bad Shmem"); // or NS_RUNTIMEABORT on child side + # return false; # } ##endif // DEBUG # mem.forget(); @@ -4086,7 +4096,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): okvar = ExprVar('ok') ifbad = StmtIf(ExprNot(okvar)) - ifbad.addifstmt(_runtimeAbort('bad Shmem')) + ifbad.addifstmts(badShmemActions) deallocShmem.addstmts([ StmtDecl(Decl(Type.BOOL, okvar.name),