cvs commit: src/sys/compat/linux linux_ipc.c src/sys/sys
	syscallsubr.h src/sys/kern sysv_shm.c 
    Ian Dowse 
    iedowse at maths.tcd.ie
       
    Mon May  5 08:53:29 PDT 2003
    
    
  
In message <200305050922.h459Mwdu049419 at repoman.freebsd.org>, Martin Blapp writ
es:
>  Change the semantics of sysv shm emulation to take a additional
>  argument to the functions shm{at,ctl}1 and shm_find_segment_by_shmid{x}.
>  The BSD semantics didn't allow the usage of shared segment after
>  being marked for removal through IPC_RMID.
I had a few incomplete stack-gap patches in this area, so I was
just looking over this change while merging. The shmctl() system
call is unfortunately quite messy to deal with, since its `struct
shmid_ds *buf' argument can point at a different type of structure
(struct shm_info) for some commands. BTW, it seems that these
additional commands (IPC_INFO, SHM_INFO) and also SHM_STAT are not
documented in shmctl(2) so they really only exist for use by the
Linux emulator.
A few comments about these changes:
 - shmctl() now assumes that it can fit a `struct shm_info' into
   `struct shmid_ds buf'. While it does fit now, it would be much
   better to use a union so as not to need this assumption.
 - The `bufsz' argument to kern_shmctl() seems to be unnecessary,
   since callers are required to know already how much space is
   required - they supplied that space. It would be better just to
   have shmctl() switch on the command code and then copyout
   sizeof(struct shm_info) or sizeof(struct shm_info) accordingly.
 - Is the 'if (error) {td->td_retval[0] = -1;}' at the end of shmctl()
   really necessary? The syscall() code should ignore td->td_retval[0]
   in the error case.
Ian
    
    
More information about the cvs-src
mailing list