Пример #1
0
bool
GMPVideoDecoderChild::Alloc(size_t aSize,
                            Shmem::SharedMemory::SharedMemoryType aType,
                            Shmem* aMem)
{
  MOZ_ASSERT(mPlugin->GMPMessageLoop() == MessageLoop::current());

  bool rv;
#ifndef SHMEM_ALLOC_IN_CHILD
  ++mNeedShmemIntrCount;
  rv = CallNeedShmem(aSize, aMem);
  --mNeedShmemIntrCount;
  if (mPendingDecodeComplete && mNeedShmemIntrCount == 0) {
    mPendingDecodeComplete = false;
    mPlugin->GMPMessageLoop()->PostTask(
      NewRunnableMethod(this, &GMPVideoDecoderChild::RecvDecodingComplete));
  }
#else
#ifdef GMP_SAFE_SHMEM
  rv = AllocShmem(aSize, aType, aMem);
#else
  rv = AllocUnsafeShmem(aSize, aType, aMem);
#endif
#endif
  return rv;
}
Пример #2
0
void
TestSysVShmemParent::Main()
{
    Shmem mem;
    size_t size = 12345;
    if (!AllocShmem(size, SharedMemory::TYPE_SYSV, &mem))
        fail("can't alloc shmem");

    if (0 > mem.GetSysVID())
        fail("invalid shmem ID");

    if (mem.Size<char>() != size)
        fail("shmem is wrong size: expected %lu, got %lu",
             size, mem.Size<char>());

    char* ptr = mem.get<char>();
    memcpy(ptr, "Hello!", sizeof("Hello!"));
    if (!SendGive(mem, size))
        fail("can't send Give()");

    // uncomment the following line for a (nondeterministic) surprise!
    //char c1 = *ptr;  (void)c1;

    // uncomment the following line for a deterministic surprise!
    //char c2 = *mem.get<char>(); (void)c2;
}
Пример #3
0
void
TestShmemParent::Main()
{
    Shmem mem;
    Shmem unsafe;

    size_t size = 12345;
    if (!AllocShmem(size, SharedMemory::TYPE_BASIC, &mem))
        fail("can't alloc shmem");
    if (!AllocUnsafeShmem(size, SharedMemory::TYPE_BASIC, &unsafe))
        fail("can't alloc shmem");

    if (mem.Size<char>() != size)
        fail("shmem is wrong size: expected %lu, got %lu",
             size, mem.Size<char>());
    if (unsafe.Size<char>() != size)
        fail("shmem is wrong size: expected %lu, got %lu",
             size, unsafe.Size<char>());

    char* ptr = mem.get<char>();
    memcpy(ptr, "Hello!", sizeof("Hello!"));

    char* unsafeptr = unsafe.get<char>();
    memcpy(unsafeptr, "Hello!", sizeof("Hello!"));

    Shmem unsafecopy = unsafe;
    if (!SendGive(mem, unsafe, size))
        fail("can't send Give()");

    // uncomment the following line for a (nondeterministic) surprise!
    //char c1 = *ptr;  (void)c1;

    // uncomment the following line for a deterministic surprise!
    //char c2 = *mem.get<char>(); (void)c2;

    // unsafe shmem gets rid of those checks
    char uc1 = *unsafeptr;  (void)uc1;
    char uc2 = *unsafecopy.get<char>(); (void)uc2;
}