Lines Matching refs:sem

14 #include <sem.h>
153 "sem");
156 struct sem_entry* sem = &sSems[i];
157 if (sem->id < 0
158 || (last != -1 && sem->u.used.last_acquirer != last)
159 || (name != NULL && strstr(sem->u.used.name, name) == NULL)
160 || (owner != -1 && sem->u.used.owner != owner))
165 " %s\n", sem, sem->id, sem->u.used.count,
166 sem->u.used.owner,
167 sem->u.used.last_acquirer > 0 ? sem->u.used.last_acquirer : 0,
168 sem->u.used.name);
176 dump_sem(struct sem_entry* sem)
178 kprintf("SEM: %p\n", sem);
179 kprintf("id: %" B_PRId32 " (%#" B_PRIx32 ")\n", sem->id, sem->id);
180 if (sem->id >= 0) {
181 kprintf("name: '%s'\n", sem->u.used.name);
182 kprintf("owner: %" B_PRId32 "\n", sem->u.used.owner);
183 kprintf("count: %" B_PRId32 "\n", sem->u.used.count);
185 if (!sem->queue.IsEmpty()) {
186 ThreadQueue::Iterator it = sem->queue.GetIterator();
193 set_debug_variable("_sem", (addr_t)sem);
194 set_debug_variable("_semID", sem->id);
195 set_debug_variable("_owner", sem->u.used.owner);
199 sem->u.used.last_acquirer, sem->u.used.last_acquire_count);
201 sem->u.used.last_releaser, sem->u.used.last_release_count);
203 if (sem->u.used.last_releaser != 0)
204 set_debug_variable("_releaser", sem->u.used.last_releaser);
208 kprintf("last acquired by: %" B_PRId32 "\n", sem->u.used.last_acquirer);
211 if (sem->u.used.last_acquirer != 0)
212 set_debug_variable("_acquirer", sem->u.used.last_acquirer);
216 kprintf("next: %p\n", sem->u.unused.next);
217 kprintf("next_id: %" B_PRId32 "\n", sem->u.unused.next_id);
244 kprintf("sem %ld (%#lx) doesn't exist!\n", num, num);
253 // walk through the sem list, trying to match name
263 kprintf("sem \"%s\" doesn't exist!\n", argv[1]);
280 struct sem_entry *sem = sSems + slot;
283 sem->u.unused.next_id = slot;
285 sem->u.unused.next_id = nextID;
288 sFreeSemsTail->u.unused.next = sem;
290 sFreeSemsHead = sem;
291 sFreeSemsTail = sem;
292 sem->u.unused.next = NULL;
297 notify_sem_select_events(struct sem_entry* sem, uint16 events)
299 if (sem->u.used.select_infos)
300 notify_select_events_list(sem->u.used.select_infos, events);
308 fill_sem_info(struct sem_entry* sem, sem_info* info, size_t size)
310 info->sem = sem->id;
311 info->team = sem->u.used.owner;
312 strlcpy(info->name, sem->u.used.name, sizeof(info->name));
313 info->count = sem->u.used.count;
314 info->latest_holder = sem->u.used.last_acquirer;
324 uninit_sem_locked(struct sem_entry& sem, char** _name, SpinLocker& locker)
326 KTRACE("delete_sem(sem: %ld)", sem.u.used.id);
328 notify_sem_select_events(&sem, B_EVENT_INVALID);
329 sem.u.used.select_infos = NULL;
332 while (queued_thread* entry = sem.queue.RemoveHead()) {
337 int32 id = sem.id;
338 sem.id = -1;
339 *_name = sem.u.used.name;
340 sem.u.used.name = NULL;
381 panic("sem %" B_PRId32 " has no owner", id);
447 add_debugger_command_etc("sem", &dump_sem_info,
449 "<sem>\n"
451 " <sem> - pointer to the semaphore structure, semaphore ID, or name\n"
471 struct sem_entry* sem = NULL;
500 sem = sFreeSemsHead;
501 if (sem) {
503 sFreeSemsHead = sem->u.unused.next;
508 SpinLocker semLocker(sem->lock);
509 sem->id = sem->u.unused.next_id;
510 sem->u.used.count = count;
511 sem->u.used.net_count = count;
512 new(&sem->queue) ThreadQueue;
513 sem->u.used.name = tempName;
514 sem->u.used.owner = team->id;
515 sem->u.used.select_infos = NULL;
516 id = sem->id;
518 list_add_item(&team->sem_list, &sem->u.used.team_link);
532 if (sem == NULL)
550 // bad sem ID
603 remove_thread_from_sem(queued_thread *entry, struct sem_entry *sem)
608 sem->queue.Remove(entry);
610 sem->u.used.count += entry->count;
619 while ((entry = sem->queue.Head()) != NULL) {
624 if (entry->count > sem->u.used.net_count)
628 sem->u.used.net_count -= entry->count;
632 sem->u.used.count += entry->count;
635 sem->queue.Remove(entry);
640 if (sem->u.used.count > 0)
641 notify_sem_select_events(sem, B_EVENT_ACQUIRE_SEMAPHORE);
654 // get the next semaphore from the team's sem list
657 sem_entry* sem = (sem_entry*)list_remove_head_item(&team->sem_list);
658 if (sem == NULL)
662 SpinLocker semLocker(sem->lock);
664 uninit_sem_locked(*sem, &name, semLocker);
738 panic("switch_sem_etc: called with interrupts disabled for sem "
754 TRACE(("switch_sem_etc: bad sem %ld\n", id));
780 KTRACE("switch_sem_etc(semToBeReleased: %ld, sem: %ld, count: %ld, "
845 TRACE(("switch_sem_etc(sem %ld): exit block name %s, "
908 KTRACE("release_sem_etc(sem: %ld, count: %ld, flags: 0x%lx)", id, count,
1057 sem_entry* sem = (sem_entry*)list_get_first_item(&team->sem_list);
1064 while (sem != NULL && index < newIndex) {
1065 sem = (sem_entry*)list_get_next_item(&team->sem_list, sem);
1069 if (sem == NULL)
1072 SpinLocker _(sem->lock);
1074 if (sem->id != -1 && sem->u.used.owner == team->id) {
1076 fill_sem_info(sem, info, size);