Lines Matching refs:event

110 	void				_Notify(select_event* event, uint16 events);
111 status_t _DeselectEvent(select_event* event);
161 fEventCondition.Init(this, "event_queue event change wait");
172 select_event* event = iter.Next();
173 event->events |= B_EVENT_DELETING;
176 _DeselectEvent(event);
180 if ((event->events & B_EVENT_QUEUED) != 0)
181 fEventList.Remove(event);
182 delete event;
187 select_event* event = listIter.Next();
191 delete event;
216 select_event* event = _GetEvent(object, type);
217 if (event != NULL) {
218 if ((event->selected_events | event->behavior)
222 // Rather than try to reuse the event object, which would be complicated
231 event = _GetEvent(object, type);
232 if (event != NULL)
236 event = new(std::nothrow) select_event;
237 if (event == NULL)
239 ObjectDeleter<select_event> eventDeleter(event);
241 event->sync = this;
242 event->object = object;
243 event->type = type;
244 event->behavior = EVENT_BEHAVIOR(events);
245 event->user_data = userData;
246 event->events = 0;
248 status_t result = fEventTree.Insert(event);
254 // the event from being used or even deleted before it is ready.
255 event->events |= B_EVENT_SELECTING;
256 event->selected_events = USER_EVENTS(events) | B_EVENT_NON_MASKABLE;
260 status_t status = select_object(event->type, event->object, event, fKernel);
263 fEventTree.Remove(event);
270 atomic_and(&event->events, ~B_EVENT_SELECTING);
282 select_event* event = _GetEvent(object, type);
283 if (event == NULL)
286 *selectedEvents = event->selected_events | event->behavior;
287 *userData = event->user_data;
298 select_event* event = _GetEvent(object, type);
299 if (event == NULL)
302 if ((atomic_or(&event->events, B_EVENT_DELETING) & B_EVENT_DELETING) != 0)
306 _DeselectEvent(event);
309 if ((event->events & B_EVENT_INVALID) == 0)
310 fEventTree.Remove(event);
311 if ((event->events & B_EVENT_QUEUED) != 0)
312 fEventList.Remove(event);
314 delete event;
323 EventQueue::_DeselectEvent(select_event* event)
325 return deselect_object(event->type, event->object, event, fKernel);
332 select_event* event = static_cast<select_event*>(info);
333 _Notify(event, events);
339 EventQueue::_Notify(select_event* event, uint16 events)
341 if ((events & event->selected_events) == 0)
344 const int32 previousEvents = atomic_or(&event->events, (events & ~B_EVENT_INVALID));
346 // If the event is already being deleted, we should ignore this notification.
350 // If the event is already queued, and it is not becoming invalid,
359 if ((event->events & B_EVENT_DELETING) != 0)
364 // from the event tree.
366 atomic_or(&event->events, B_EVENT_INVALID);
367 fEventTree.Remove(event);
371 if ((atomic_or(&event->events, B_EVENT_QUEUED) & B_EVENT_QUEUED) == 0) {
372 fEventList.Add(event);
410 // Due to level-triggered events, it is possible for the event list to have
432 for (select_event* event = NULL; count < numInfos; ) {
436 event = fEventList.RemoveHead();
437 int32 events = atomic_and(&event->events,
438 ~(event->selected_events | B_EVENT_QUEUED));
444 && (event->behavior & B_EVENT_LEVEL_TRIGGERED) != 0) {
445 // This event is level-triggered. We need to deselect and reselect it,
447 const select_event tmp = *event;
452 event = NULL;
459 // Is the event still queued?
460 event = _GetEvent(tmp.object, tmp.type);
461 if (event == NULL)
463 events = atomic_get(&event->events);
466 } else if (event == NULL) {
471 infos[count].object = event->object;
472 infos[count].type = event->type;
473 infos[count].user_data = event->user_data;
478 if ((events & B_EVENT_INVALID) == 0 && (event->behavior & B_EVENT_ONE_SHOT) == 0)
481 // Check if the event was requeued.
482 if ((atomic_and(&event->events, ~B_EVENT_QUEUED) & B_EVENT_QUEUED) != 0)
483 fEventList.Remove(event);
486 // The event will already have been removed from the tree.
487 delete event;
488 } else if ((event->behavior & B_EVENT_ONE_SHOT) != 0) {
490 fEventTree.Remove(event);
491 event->events = B_EVENT_DELETING;
493 deselect[deselectCount++] = event;
504 select_event* event = deselect[i];
506 _DeselectEvent(event);
507 delete event;
521 * queue lock held. This method will sleep if the event is undergoing selection
530 select_event* event = fEventTree.Find(key);
531 if (event == NULL)
534 if ((event->events & (B_EVENT_SELECTING | B_EVENT_DELETING)) == 0)
535 return event;