No, it is not the address (the 2nd param) passed to shmat calls. I'm passing "(void*)0". It is the address returned by shmat, after attaching the segment.
My code is as below:- int id = shmget(key,size,(0777 | IPC_CREAT | IPC_EXCL)); if(errno == EEXIST){ id = shmget(key,size,(0777 | IPC_CREAT)); } suht->_dataMemSegments[idx]._dataMemory = (pSUHT_ITEM)shmat(id, (void *)0, 0777 | SHM_SHARE_MMU); if(NULL == suht->_dataMemSegments[idx]._dataMemory || errno != 0){ printf("shm:_dataMemory:failed: errno:%d\n",errno); return errno; } -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: 04 April 2007 16:49 To: Borse, Ganesh Cc: 'perf-discuss@opensolaris.org' Subject: Re: [perf-discuss] Request for guidance on shmat() call attaching at different addre ss Hi Genesh, Are you specifying an address in your shmat calls? Can you post code segments doing shmget/shmat? max Borse, Ganesh wrote: > > Hi, > I am facing a problem of shared memory segment getting attached at > different address, when the processes using it go down and attach > count goes to zero. > > This causes the problem when the processes next time come up & try to > access the addresses taken from the shared memory segment. > > The scenario in brief:- > I've 3 processes using multiple shared memory segments. Shared memory > segments (shm) are also used in hierarchical fashion. > > One shm is used as a high level data structure to hold pointers to > other shms. > Second shm is an array of pointers to structures (data blocks) which > will get allocated in the third shm. For the other 2 processes to > access these blocks, their addresses will be stored in this second shm > (an array). > > The third shm actually holds the data as retrieved by the server > process from database. This is acting as cache. > When the third shm gets completely used, the server process creates > new shm and starts storing data into it. Once all data gets stored, > server process goes down - without removing any shm. > > Next when the client processes comes up, they attach to all these shms > created by server process. > When the client process calls "shmat" on the first 3 memory segments, > shmat returns the same address which it returned to server process > (these addresses are stored in 1st shm). > > But, when client process tries to attach to 4th segment (which was > created after the third data shm filled up), the shmat returns totally > different address than that of returned to the server process. > > Since, the addresses stored in array shm correspond to the different > shm address, when the client process tries to access those addresses, > it crashes with SIGSEGV. > > I am using SHM_SHARE_MMU flag with shmat to use the feature of ISM & > to get same address. > > Any clue/ hint why only the 4th (last segment) shmat returns different > address? Is this the normal behavior? > Could I be doing something wrong only while creating this segment? > > Please help. > > Thanks and Regards, > GaneshB > > ====================================================================== > ======== Please access the attached hyperlink for an important > electronic communications disclaimer: > > http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html > ====================================================================== > ======== > > ---------------------------------------------------------------------- > -- > > _______________________________________________ > perf-discuss mailing list > perf-discuss@opensolaris.org ============================================================================== Please access the attached hyperlink for an important electronic communications disclaimer: http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html ============================================================================== _______________________________________________ perf-discuss mailing list perf-discuss@opensolaris.org