Home | History | Annotate | Download | only in libcutils

Lines Matching refs:Selector

17 #define LOG_TAG "selector"
28 #include <cutils/selector.h>
32 struct Selector {
58 static void setInSelect(Selector* selector, bool inSelect) {
59 pthread_mutex_lock(&selector->inSelectLock);
60 selector->inSelect = inSelect;
61 pthread_mutex_unlock(&selector->inSelectLock);
64 static bool isInSelect(Selector* selector) {
65 pthread_mutex_lock(&selector->inSelectLock);
66 bool inSelect = selector->inSelect;
67 pthread_mutex_unlock(&selector->inSelectLock);
71 void selectorWakeUp(Selector* selector) {
72 if (!isInSelect(selector)) {
78 if (write(selector->wakeupPipe[1], garbage, sizeof(garbage)) < 0) {
87 Selector* selectorCreate(void) {
88 Selector* selector = calloc(1, sizeof(Selector));
89 if (selector == NULL) {
92 selector->selectableFds = arrayCreate();
95 if (pipe(selector->wakeupPipe) < 0) {
99 LOGD("Wakeup fd: %d", selector->wakeupPipe[0]);
101 SelectableFd* wakeupFd = selectorAdd(selector, selector->wakeupPipe[0]);
107 pthread_mutex_init(&selector->inSelectLock, NULL);
109 return selector;
112 SelectableFd* selectorAdd(Selector* selector, int fd) {
113 assert(selector != NULL);
117 selectableFd->selector = selector;
120 arrayAdd(selector->selectableFds, selectableFd);
142 static void prepareForSelect(Selector* selector) {
143 fd_set* exceptFds = &selector->exceptFds;
144 fd_set* readFds = &selector->readFds;
145 fd_set* writeFds = &selector->writeFds;
151 Array* selectableFds = selector->selectableFds;
153 selector->maxFd = 0;
186 if (fd > selector->maxFd) {
187 selector->maxFd = fd;
214 static void fireEvents(Selector* selector) {
215 Array* selectableFds = selector->selectableFds;
221 &selector->exceptFds);
223 &selector->readFds);
225 &selector->writeFds);
229 void selectorLoop(Selector* selector) {
231 if (selector->looping) {
234 selector->looping = true;
237 setInSelect(selector, true);
239 prepareForSelect(selector);
244 int result = select(selector->maxFd + 1, &selector->readFds,
245 &selector->writeFds, &selector->exceptFds, NULL);
249 setInSelect(selector, false);
260 fireEvents(selector);