Return TypeFunction nameArguments
hzEcodehzShmem::Init(const char*,unsigned int,unsigned int,)

Declared in file: hzProcess.h
Defined in file : hzProcess.cpp

Function Logic:

0:START 1:m_name 2:Return E_INITDUP 3:!name||!name[0] 4:Return E_ARGUMENT 5:m_name m_size m_perm shm_open m_fd 6:ftruncate(m_fd,m_size)!=0 7:Return E_INITFAIL 8:mmap m_pStart 9:!m_pStart||m_pStart==(void*)-1 10:Return E_INITFAIL 11:Return E_OK

Function body:

hzEcode hzShmem::Init (const char* name, unsigned int size, unsigned int mask)
{
   _hzfunc("hzShmem::Init") ;
   if (m_name)
   {
       hzerr(E_INITDUP, "Shared memory segment %s already initialized", *m_name) ;
       return E_INITDUP ;
   }
   if (!name || !name[0])
   {
       hzerr(E_ARGUMENT, "No name supplied") ;
       return E_ARGUMENT ;
   }
   m_name = name ;
   m_size = ((size/4096)+1)*4096;
   m_perm = mask ;
   //  Open shared memory
   m_fd = shm_open(name, O_RDWR | O_CREAT, 0666);
   threadLog("Set fd to %d\n", m_fd) ;
   if (ftruncate(m_fd, m_size) != 0)
   {
       hzerr(E_INITFAIL, "Shared memory could not be sized to %d bytes", m_size) ;
       return E_INITFAIL ;
   }
   threadLog("Set size to %d\n", m_size) ;
   m_pStart = mmap(0,m_size, PROT_READ | PROT_WRITE, MAP_SHARED, m_fd, 0);
   if (!m_pStart || m_pStart == (void*)-1)
   {
       hzerr(E_INITFAIL, "Shared memory address at %p errno is %d\n", m_pStart, errno) ;
       return E_INITFAIL ;
   }
   threadLog("mem at %p\n", m_pStart) ;
   return E_OK ;
}