void test1(void) { int pid, parent = getpid(); if ((pid = fork()) == 0) { int event, sum = 0; while (recv_event(&pid, &event) == 0 && parent == pid) { if (event == -1) { cprintf("child1 Hmmm!\n"); sleep(100); cprintf("child1 quit\n"); exit(-1); } cprintf("child1 receive %08x from %d\n", event, pid); sum += event; } panic("FAIL: T.T\n"); } assert(pid > 0); int i = 10; while (send_event(pid, i) == 0) { i --; sleep(50); } cprintf("test1 pass.\n"); }
int ipc_event_recv(int *pid_store, int *event_store, unsigned int timeout) { if (event_store == NULL) { return -E_INVAL; } struct mm_struct *mm = current->mm; if (pid_store != NULL) { if (!user_mem_check(mm, (uintptr_t)pid_store, sizeof(int), 1)) { return -E_INVAL; } } if (!user_mem_check(mm, (uintptr_t)event_store, sizeof(int), 1)) { return -E_INVAL; } unsigned long saved_ticks; timer_t __timer, *timer = ipc_timer_init(timeout, &saved_ticks, &__timer); int pid, event, ret; if ((ret = recv_event(&pid, &event, timer)) == 0) { lock_mm(mm); { ret = -E_INVAL; if (pid_store == NULL || copy_to_user(mm, pid_store, &pid, sizeof(int))) { if (copy_to_user(mm, event_store, &event, sizeof(int))) { ret = 0; } } } unlock_mm(mm); return ret; } return ipc_check_timeout(timeout, saved_ticks); }
/* ****************************************************************************** * dgadmin_rest_sync_main -- *//** * * \brief This routine periodically starts sync circle. * * \param [in] pDummy Not used. * * \retval None * *****************************************************************************/ static void dgadmin_rest_sync_main(UINT1 *pDummy) { unsigned int listenEvent = 0; unsigned int recvEvent = 0; if (sem_give(gDgwySyncSemId) != OSW_OK) { return; } if (create_queue("RSYNC", OSW_MAX_Q_MSG_LEN, 10, &gDgwySyncMsgId) != OSW_OK) { printf("%s:error when create queue\n",__FUNCTION__); return; } if (create_timer("RSTASK", DGWY_SYNC_TASK_TIMER_EVENT, NULL, 0, &gDgwySyncTimerListId) != OSW_OK) { printf("%s:error when create_timer\n",__FUNCTION__); return; } /* start the timer */ start_timer(gDgwySyncTimerListId, DGADMIN_REST_SYNC_INTERVAL, 0); listenEvent = DGWY_SYNC_TASK_TIMER_EVENT;/* | DGWY_SYNC_TASK_MSG_EVENT; */ log_info(ServiceUtilLogLevel, "INIT REST SYNC TASK "); while (1) { if(recv_event(gDgwySyncTaskId, listenEvent, OSW_NO_WAIT, &recvEvent) == OSW_ERROR) { sleep(10); continue; } log_debug(ServiceUtilLogLevel,"recvEvent %d\n", recvEvent); if(recvEvent & DGWY_SYNC_TASK_TIMER_EVENT) { if(g_dgw_role) { /* Try to be in sync with DMC */ log_notice(ServiceUtilLogLevel, "SYNC START: version %d\n", g_dgwconfig_curversion); dgadmin_rest_sync_process(); log_notice(ServiceUtilLogLevel, "SYNC END : version %d\n", g_dgwconfig_curversion); } start_timer(gDgwySyncTimerListId, DGADMIN_REST_SYNC_INTERVAL, 0); } } }
void csr_setup( void ) { int i; for (i=0; i<3; i++) { bt_uart_rx(event, 7); bt_uart_tx(reset, 4); DelayMilliSeconds(200); if (0 == memcmp(event, reset_rsp, 7)) break; } bt_uart_tx(anafreq, sizeof(anafreq)); recv_event(); bt_uart_tx(hostif, sizeof(hostif)); recv_event(); bt_uart_tx(h4cfg, sizeof(h4cfg)); recv_event(); bt_uart_tx(nopdisable, sizeof(nopdisable)); recv_event(); bt_uart_tx(baudrate, sizeof(baudrate)); recv_event(); bt_uart_tx(warmreset, sizeof(warmreset)); DelayMilliSeconds(500); configureBtUart(BT_UART_WORKING_BAUD_RATE, 1); // verify bt_uart_tx(readver, 4); recv_event(); }
void net::nstream_proactor::conn_nstream::read() { touch(); buffer buf; int n_bytes = N->recv(buf); if(n_bytes <= 0){ //assume connection reset (may not be) error = connection_reset_error; Conn_Container.remove(_info->conn_ID); }else{ Dispatcher.recv(recv_event(_info, buf)); } }