This commit is contained in:
Chris Jones 2010-09-01 13:01:50 -05:00
Родитель ca19eda863
Коммит 405278e221
5 изменённых файлов: 177 добавлений и 0 удалений

Просмотреть файл

@ -71,6 +71,7 @@ IPDLTESTS = \
TestRPCErrorCleanup \
TestRPCRaces \
TestRPCShutdownRace \
TestRacyReentry \
TestRacyRPCReplies \
TestSanity \
TestSelfManageRoot \

Просмотреть файл

@ -0,0 +1,21 @@
namespace mozilla {
namespace _ipdltest {
rpc protocol PTestRacyReentry {
parent:
rpc E();
__delete__();
child:
async Start();
async N();
rpc H();
};
} // namespace mozilla
} // namespace _ipdltest

Просмотреть файл

@ -0,0 +1,84 @@
#include "TestRacyReentry.h"
#include "IPDLUnitTests.h" // fail etc.
namespace mozilla {
namespace _ipdltest {
//-----------------------------------------------------------------------------
// parent
TestRacyReentryParent::TestRacyReentryParent() : mRecvdE(false)
{
MOZ_COUNT_CTOR(TestRacyReentryParent);
}
TestRacyReentryParent::~TestRacyReentryParent()
{
MOZ_COUNT_DTOR(TestRacyReentryParent);
}
void
TestRacyReentryParent::Main()
{
if (!SendStart())
fail("sending Start");
if (!SendN())
fail("sending N");
}
bool
TestRacyReentryParent::AnswerE()
{
if (!mRecvdE) {
mRecvdE = true;
return true;
}
if (!CallH())
fail("calling H");
return true;
}
//-----------------------------------------------------------------------------
// child
TestRacyReentryChild::TestRacyReentryChild()
{
MOZ_COUNT_CTOR(TestRacyReentryChild);
}
TestRacyReentryChild::~TestRacyReentryChild()
{
MOZ_COUNT_DTOR(TestRacyReentryChild);
}
bool
TestRacyReentryChild::RecvStart()
{
if (!CallE())
fail("calling E");
Close();
return true;
}
bool
TestRacyReentryChild::RecvN()
{
if (!CallE())
fail("calling E");
return true;
}
bool
TestRacyReentryChild::AnswerH()
{
return true;
}
} // namespace _ipdltest
} // namespace mozilla

Просмотреть файл

@ -0,0 +1,70 @@
#ifndef mozilla__ipdltest_TestRacyReentry_h
#define mozilla__ipdltest_TestRacyReentry_h 1
#include "mozilla/_ipdltest/IPDLUnitTests.h"
#include "mozilla/_ipdltest/PTestRacyReentryParent.h"
#include "mozilla/_ipdltest/PTestRacyReentryChild.h"
namespace mozilla {
namespace _ipdltest {
class TestRacyReentryParent :
public PTestRacyReentryParent
{
public:
TestRacyReentryParent();
virtual ~TestRacyReentryParent();
void Main();
protected:
NS_OVERRIDE
virtual bool AnswerE();
NS_OVERRIDE
virtual void ActorDestroy(ActorDestroyReason why)
{
if (NormalShutdown != why)
fail("unexpected destruction!");
passed("ok");
QuitParent();
}
bool mRecvdE;
};
class TestRacyReentryChild :
public PTestRacyReentryChild
{
public:
TestRacyReentryChild();
virtual ~TestRacyReentryChild();
protected:
NS_OVERRIDE
virtual bool RecvStart();
NS_OVERRIDE
virtual bool RecvN();
NS_OVERRIDE
virtual bool AnswerH();
NS_OVERRIDE
virtual void ActorDestroy(ActorDestroyReason why)
{
if (NormalShutdown != why)
fail("unexpected destruction!");
QuitChild();
}
};
} // namespace _ipdltest
} // namespace mozilla
#endif // ifndef mozilla__ipdltest_TestRacyReentry_h

Просмотреть файл

@ -17,6 +17,7 @@ IPDLSRCS = \
PTestMultiMgrsRight.ipdl \
PTestMultiMgrsBottom.ipdl \
PTestNestedLoops.ipdl \
PTestRacyReentry.ipdl \
PTestRacyRPCReplies.ipdl \
PTestRPCErrorCleanup.ipdl \
PTestRPCRaces.ipdl \