sysv_sem.c (145230) | sysv_sem.c (147091) |
---|---|
1/*- 2 * Implementation of SVID semaphores 3 * 4 * Author: Daniel Boulet 5 * 6 * This software is provided ``AS IS'' without any warranties of any kind. 7 */ 8/*- --- 23 unchanged lines hidden (view full) --- 32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36 * SUCH DAMAGE. 37 */ 38 39#include <sys/cdefs.h> | 1/*- 2 * Implementation of SVID semaphores 3 * 4 * Author: Daniel Boulet 5 * 6 * This software is provided ``AS IS'' without any warranties of any kind. 7 */ 8/*- --- 23 unchanged lines hidden (view full) --- 32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36 * SUCH DAMAGE. 37 */ 38 39#include <sys/cdefs.h> |
40__FBSDID("$FreeBSD: head/sys/kern/sysv_sem.c 145230 2005-04-18 11:51:10Z rwatson $"); | 40__FBSDID("$FreeBSD: head/sys/kern/sysv_sem.c 147091 2005-06-07 05:03:28Z rwatson $"); |
41 42#include "opt_sysvipc.h" 43#include "opt_mac.h" 44 45#include <sys/param.h> 46#include <sys/systm.h> 47#include <sys/sysproto.h> 48#include <sys/eventhandler.h> --- 194 unchanged lines hidden (view full) --- 243 M_WAITOK | M_ZERO); 244 semu = malloc(seminfo.semmnu * seminfo.semusz, M_SEM, M_WAITOK); 245 246 for (i = 0; i < seminfo.semmni; i++) { 247 sema[i].u.sem_base = 0; 248 sema[i].u.sem_perm.mode = 0; 249 sema[i].u.sem_perm.seq = 0; 250#ifdef MAC | 41 42#include "opt_sysvipc.h" 43#include "opt_mac.h" 44 45#include <sys/param.h> 46#include <sys/systm.h> 47#include <sys/sysproto.h> 48#include <sys/eventhandler.h> --- 194 unchanged lines hidden (view full) --- 243 M_WAITOK | M_ZERO); 244 semu = malloc(seminfo.semmnu * seminfo.semusz, M_SEM, M_WAITOK); 245 246 for (i = 0; i < seminfo.semmni; i++) { 247 sema[i].u.sem_base = 0; 248 sema[i].u.sem_perm.mode = 0; 249 sema[i].u.sem_perm.seq = 0; 250#ifdef MAC |
251 mac_init_sysv_sema(&sema[i]); | 251 mac_init_sysv_sem(&sema[i]); |
252#endif 253 } 254 for (i = 0; i < seminfo.semmni; i++) 255 mtx_init(&sema_mtx[i], "semid", NULL, MTX_DEF); 256 for (i = 0; i < seminfo.semmnu; i++) { 257 struct sem_undo *suptr = SEMU(i); 258 suptr->un_proc = NULL; 259 } --- 9 unchanged lines hidden (view full) --- 269 int i; 270 271 if (semtot != 0) 272 return (EBUSY); 273 274 EVENTHANDLER_DEREGISTER(process_exit, semexit_tag); 275#ifdef MAC 276 for (i = 0; i < seminfo.semmni; i++) | 252#endif 253 } 254 for (i = 0; i < seminfo.semmni; i++) 255 mtx_init(&sema_mtx[i], "semid", NULL, MTX_DEF); 256 for (i = 0; i < seminfo.semmnu; i++) { 257 struct sem_undo *suptr = SEMU(i); 258 suptr->un_proc = NULL; 259 } --- 9 unchanged lines hidden (view full) --- 269 int i; 270 271 if (semtot != 0) 272 return (EBUSY); 273 274 EVENTHANDLER_DEREGISTER(process_exit, semexit_tag); 275#ifdef MAC 276 for (i = 0; i < seminfo.semmni; i++) |
277 mac_destroy_sysv_sema(&sema[i]); | 277 mac_destroy_sysv_sem(&sema[i]); |
278#endif 279 free(sem, M_SEM); 280 free(sema, M_SEM); 281 free(semu, M_SEM); 282 for (i = 0; i < seminfo.semmni; i++) 283 mtx_destroy(&sema_mtx[i]); 284 mtx_destroy(&sem_mtx); 285 return (0); --- 355 unchanged lines hidden (view full) --- 641 sem[i] = sem[i + semakptr->u.sem_nsems]; 642 for (i = 0; i < seminfo.semmni; i++) { 643 if ((sema[i].u.sem_perm.mode & SEM_ALLOC) && 644 sema[i].u.sem_base > semakptr->u.sem_base) 645 sema[i].u.sem_base -= semakptr->u.sem_nsems; 646 } 647 semakptr->u.sem_perm.mode = 0; 648#ifdef MAC | 278#endif 279 free(sem, M_SEM); 280 free(sema, M_SEM); 281 free(semu, M_SEM); 282 for (i = 0; i < seminfo.semmni; i++) 283 mtx_destroy(&sema_mtx[i]); 284 mtx_destroy(&sem_mtx); 285 return (0); --- 355 unchanged lines hidden (view full) --- 641 sem[i] = sem[i + semakptr->u.sem_nsems]; 642 for (i = 0; i < seminfo.semmni; i++) { 643 if ((sema[i].u.sem_perm.mode & SEM_ALLOC) && 644 sema[i].u.sem_base > semakptr->u.sem_base) 645 sema[i].u.sem_base -= semakptr->u.sem_nsems; 646 } 647 semakptr->u.sem_perm.mode = 0; 648#ifdef MAC |
649 mac_cleanup_sysv_sema(semakptr); | 649 mac_cleanup_sysv_sem(semakptr); |
650#endif 651 SEMUNDO_LOCK(); 652 semundo_clear(semid, -1); 653 SEMUNDO_UNLOCK(); 654 wakeup(semakptr); 655 break; 656 657 case IPC_SET: --- 269 unchanged lines hidden (view full) --- 927 sema[semid].u.sem_nsems = nsems; 928 sema[semid].u.sem_otime = 0; 929 sema[semid].u.sem_ctime = time_second; 930 sema[semid].u.sem_base = &sem[semtot]; 931 semtot += nsems; 932 bzero(sema[semid].u.sem_base, 933 sizeof(sema[semid].u.sem_base[0])*nsems); 934#ifdef MAC | 650#endif 651 SEMUNDO_LOCK(); 652 semundo_clear(semid, -1); 653 SEMUNDO_UNLOCK(); 654 wakeup(semakptr); 655 break; 656 657 case IPC_SET: --- 269 unchanged lines hidden (view full) --- 927 sema[semid].u.sem_nsems = nsems; 928 sema[semid].u.sem_otime = 0; 929 sema[semid].u.sem_ctime = time_second; 930 sema[semid].u.sem_base = &sem[semtot]; 931 semtot += nsems; 932 bzero(sema[semid].u.sem_base, 933 sizeof(sema[semid].u.sem_base[0])*nsems); 934#ifdef MAC |
935 mac_create_sysv_sema(cred, &sema[semid]); | 935 mac_create_sysv_sem(cred, &sema[semid]); |
936#endif 937 DPRINTF(("sembase = 0x%x, next = 0x%x\n", 938 sema[semid].u.sem_base, &sem[semtot])); 939 } else { 940 DPRINTF(("didn't find it and wasn't asked to create it\n")); 941 error = ENOENT; 942 goto done2; 943 } --- 398 unchanged lines hidden --- | 936#endif 937 DPRINTF(("sembase = 0x%x, next = 0x%x\n", 938 sema[semid].u.sem_base, &sem[semtot])); 939 } else { 940 DPRINTF(("didn't find it and wasn't asked to create it\n")); 941 error = ENOENT; 942 goto done2; 943 } --- 398 unchanged lines hidden --- |