Changeset 5842
- Timestamp:
- 03/17/10 15:12:44 (3 years ago)
- Location:
- luci2/libubox
- Files:
-
- 1 added
- 2 modified
Legend:
- Unmodified
- Added
- Removed
-
luci2/libubox/Makefile
r5840 r5842 9 9 10 10 libubox.so: ucix.c blob.c hash.c uhtbl.c ulog.c 11 $(CC) $(CFLAGS) - o $@ -shared -Wl,-soname,libubox.so $^ -luci11 $(CC) $(CFLAGS) -g -o $@ -shared -Wl,-soname,libubox.so $^ -luci 12 12 13 13 libuloop.so: uloop.c 14 $(CC) $(CFLAGS) - o $@ -shared -Wl,-soname,libuloop.so $^ -lubus -I../ubus/ -I./14 $(CC) $(CFLAGS) -g -o $@ -shared -Wl,-soname,libuloop.so $^ -lubus -I../ubus/ -I./ 15 15 16 16 clean: -
luci2/libubox/uloop.c
r5840 r5842 25 25 #include <poll.h> 26 26 #include <string.h> 27 #include <time.h> 27 28 #include <fcntl.h> 28 29 #include <signal.h> … … 32 33 33 34 #include <libubus.h> 35 #include "uloop.h" 34 36 #include "ulog.h" 35 36 struct uloop_sock;37 typedef void (*_uloop_sock_handler)(struct uloop_sock *u);38 37 39 38 struct uloop_sock … … 68 67 ev.events = EPOLLIN | EPOLLET | EPOLLRDHUP; 69 68 ev.data.fd = sock; 69 ev.data.ptr = u; 70 70 epoll_ctl(epoll_fd, EPOLL_CTL_ADD, sock, &ev); 71 71 return u; … … 74 74 void uloop_ubus_add(struct ubus_ctx *ctx) 75 75 { 76 int s = ubus_get_sock(ctx);77 76 if(!uloop_ubus) 78 77 uloop_ubus = ctx; 79 if(s)80 uloop_sock_add(s, ctx, uloop_ubus_cb);81 78 } 82 79 … … 107 104 } 108 105 109 int uloop(void )106 int uloop(void (*cb)(void), int timeout) 110 107 { 111 108 #define MAX_EVENTS 10 112 109 struct epoll_event events[MAX_EVENTS]; 113 110 int nfds, n; 111 time_t t = time(0); 114 112 uloop_loop = 1; 115 113 uloop_setup_signals(); … … 127 125 epoll_ctl(epoll_fd, EPOLL_CTL_DEL, u->sock, 0); 128 126 uloop_sock_delete(u); 129 } else { 130 u->cb(u); 127 } else if(events[n].events & EPOLLIN) 128 { 129 if(u->cb) 130 u->cb(u); 131 131 } 132 } 133 if(cb) 134 { 135 if(difftime(time(0), t) < timeout) 136 continue; 137 t = time(0); 138 cb(); 132 139 } 133 140 }
