1#include <linux/workqueue.h> 2#include <barrelfish/waitset.h> 3 4struct test { 5 struct work_struct work; 6}; 7 8static void test_fn(struct work_struct *work) { 9 printf("1\n"); 10} 11 12static void polling_loop(void) { 13 errval_t err; 14 struct waitset *ws = get_default_waitset(); 15 while (1) { 16 err = event_dispatch(ws); 17 if (err_is_fail(err)) { 18 DEBUG_ERR(err, "in event_dispatch"); 19 break; 20 } 21 } 22} 23 24int main(int argc, char ** argv) { 25 struct workqueue_struct *wq; 26 struct test *test1 = malloc(sizeof *test1); 27 struct test *test2 = malloc(sizeof *test2); 28 29 printf("init\n"); 30 wq = create_singlethread_workqueue("name"); 31 INIT_WORK(&test1->work, test_fn); 32 INIT_WORK(&test2->work, test_fn); 33 queue_work(wq, &test1->work); 34 queue_work(wq, &test2->work); 35 polling_loop(); 36} 37