Deleted Added
full compact
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 ---