MessagingArea * MessagingArea::Create(sem_id lockSem, sem_id counterSem) { // allocate the object on the heap MessagingArea *area = new(nothrow) MessagingArea; if (!area) return NULL; // create the area area->fID = create_area("messaging", (void**)&area->fHeader, B_ANY_KERNEL_ADDRESS, kMessagingAreaSize, B_FULL_LOCK, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_USER_CLONEABLE_AREA); if (area->fID < 0) { delete area; return NULL; } // finish the initialization of the object area->fSize = kMessagingAreaSize; area->fLockSem = lockSem; area->fCounterSem = counterSem; area->fNextArea = NULL; area->InitHeader(); return area; }