| 860 | } |
| 861 | |
| 862 | static void |
| 863 | shmrealloc(void) |
| 864 | { |
| 865 | struct shmid_kernel *newsegs; |
| 866 | int i; |
| 867 | |
| 868 | SYSVSHM_ASSERT_LOCKED(); |
| 869 | |
| 870 | if (shmalloced >= shminfo.shmmni) |
| 871 | return; |
| 872 | |
| 873 | newsegs = malloc(shminfo.shmmni * sizeof(*newsegs), M_SHM, |
| 874 | M_WAITOK | M_ZERO); |
| 875 | for (i = 0; i < shmalloced; i++) |
| 876 | bcopy(&shmsegs[i], &newsegs[i], sizeof(newsegs[0])); |
| 877 | for (; i < shminfo.shmmni; i++) { |
| 878 | newsegs[i].u.shm_perm.mode = SHMSEG_FREE; |
| 879 | newsegs[i].u.shm_perm.seq = 0; |
| 880 | #ifdef MAC |
| 881 | mac_sysvshm_init(&newsegs[i]); |
| 882 | #endif |
| 883 | } |
| 884 | free(shmsegs, M_SHM); |
| 885 | shmsegs = newsegs; |
| 886 | shmalloced = shminfo.shmmni; |
| 887 | } |
| 888 | |
| 889 | static struct syscall_helper_data shm_syscalls[] = { |
| 890 | SYSCALL_INIT_HELPER(shmat), |
no test coverage detected