void net_loop (void) { delete_stdin_event = 0; if (verbosity >= E_DEBUG) { logprintf ("Starting netloop\n"); } term_ev = event_new (TLS->ev_base, 0, EV_READ | EV_PERSIST, stdin_read_callback, 0); event_add (term_ev, 0); int last_get_state = time (0); while (1) { event_base_loop (TLS->ev_base, EVLOOP_ONCE); if (term_ev && delete_stdin_event) { logprintf ("delete stdin\n"); event_free (term_ev); term_ev = 0; } #ifdef USE_LUA lua_do_all (); #endif #ifdef USE_PYTHON py_do_all (); #endif if (safe_quit && !TLS->active_queries) { printf ("All done. Exit\n"); do_halt (0); safe_quit = 0; } if (sigterm_cnt > 0) { do_halt (0); } if (time (0) - last_get_state > 3600) { tgl_do_lookup_state (TLS); last_get_state = time (0); } write_state_file (); update_prompt (); /* if (unknown_user_list_pos) { int i; for (i = 0; i < unknown_user_list_pos; i++) { tgl_do_get_user_info (TLS, TGL_MK_USER (unknown_user_list[i]), 0, 0, 0); } unknown_user_list_pos = 0; } */ } if (term_ev) { event_free (term_ev); term_ev = 0; } if (verbosity >= E_DEBUG) { logprintf ("End of netloop\n"); } }
/* * Free the Job Control Record if no one is still using it. * Called from main free_jcr() routine in src/lib/jcr.c so * that we can do our Director specific cleanup of the jcr. */ void dird_free_jcr(JCR *jcr) { Dmsg0(200, "Start dird free_jcr\n"); dird_free_jcr_pointers(jcr); if (jcr->term_wait_inited) { pthread_cond_destroy(&jcr->term_wait); jcr->term_wait_inited = false; } if (jcr->nextrun_ready_inited) { pthread_cond_destroy(&jcr->nextrun_ready); jcr->nextrun_ready_inited = false; } if (jcr->db_batch) { db_sql_close_pooled_connection(jcr, jcr->db_batch); jcr->db_batch = NULL; jcr->batch_started = false; } if (jcr->db) { db_sql_close_pooled_connection(jcr, jcr->db); jcr->db = NULL; } if (jcr->restore_tree_root) { free_tree(jcr->restore_tree_root); } if (jcr->bsr) { free_bsr(jcr->bsr); jcr->bsr = NULL; } free_and_null_pool_memory(jcr->stime); free_and_null_pool_memory(jcr->fname); free_and_null_pool_memory(jcr->res.pool_source); free_and_null_pool_memory(jcr->res.npool_source); free_and_null_pool_memory(jcr->res.rpool_source); free_and_null_pool_memory(jcr->res.wstore_source); free_and_null_pool_memory(jcr->res.rstore_source); free_and_null_pool_memory(jcr->res.catalog_source); /* * Delete lists setup to hold storage pointers */ free_rwstorage(jcr); jcr->job_end_push.destroy(); if (jcr->JobId != 0) { write_state_file(director->working_directory, "bareos-dir", get_first_port_host_order(director->DIRaddrs)); } free_plugins(jcr); /* release instantiated plugins */ Dmsg0(200, "End dird free_jcr\n"); }
// Write the client_state.xml file if necessary // TODO: write no more often than X seconds // int CLIENT_STATE::write_state_file_if_needed() { int retval; if (client_state_dirty) { client_state_dirty = false; retval = write_state_file(); if (retval) return retval; } return 0; }
static gboolean queries_timerfunc (gpointer data) { debug ("queries_timerfunc()\n"); telegram_conn *conn = data; if (conn->updated) { conn->updated = 0; write_state_file (conn->TLS); } return 1; }
void net_loop (int flags, int (*is_end)(void)) { while (!is_end ()) { uSleep(10000); struct pollfd fds[101]; int cc = 0; if (flags & 3) { fds[0].fd = 0; fds[0].events = POLLIN; cc ++; } write_state_file (); int x = connections_make_poll_array (fds + cc, 101 - cc) + cc; double timer = next_timer_in (); if (timer > 1000) { timer = 1000; } if (poll (fds, x, timer) < 0) { work_timers (); continue; } work_timers (); if ((flags & 3) && (fds[0].revents & POLLIN)) { unread_messages = 0; if (flags & 1) { // rl_callback_read_char (); qthreadExec(); } else { char *line = 0; size_t len = 0; assert (getline (&line, &len, stdin) >= 0); got_it (line, strlen (line)); } } connections_poll_result (fds + cc, x - cc); #ifdef USE_LUA lua_do_all (); #endif if (safe_quit && !queries_num) { printf ("All done. Exit\n"); qthreadExitRequest (0); } if (unknown_user_list_pos) { do_get_user_list_info_silent (unknown_user_list_pos, unknown_user_list); unknown_user_list_pos = 0; } } }
/* Cleanup and then exit */ void terminate_dird(int sig) { static bool already_here = false; if (already_here) { /* avoid recursive temination problems */ bmicrosleep(2, 0); /* yield */ exit(1); } already_here = true; debug_level = 0; /* turn off debug */ stop_watchdog(); db_sql_pool_destroy(); db_flush_backends(); unload_dir_plugins(); write_state_file(me->working_directory, "bareos-dir", get_first_port_host_order(me->DIRaddrs)); delete_pid_file(me->pid_directory, "bareos-dir", get_first_port_host_order(me->DIRaddrs)); term_scheduler(); term_job_server(); if (runjob) { free(runjob); } if (configfile != NULL) { free(configfile); } if (debug_level > 5) { print_memory_pool_stats(); } if (my_config) { my_config->free_resources(); free(my_config); my_config = NULL; } stop_UA_server(); term_msg(); /* terminate message handler */ cleanup_crypto(); close_memory_pool(); /* release free memory in pool */ lmgr_cleanup_main(); sm_dump(false); exit(sig); }
/* * Free the Job Control Record if no one is still using it. * Called from main free_jcr() routine in src/lib/jcr.c so * that we can do our Director specific cleanup of the jcr. */ void dird_free_jcr(JCR *jcr) { Dmsg0(200, "Start dird free_jcr\n"); dird_free_jcr_pointers(jcr); if (jcr->term_wait_inited) { pthread_cond_destroy(&jcr->term_wait); jcr->term_wait_inited = false; } if (jcr->db_batch) { db_close_database(jcr, jcr->db_batch); jcr->db_batch = NULL; jcr->batch_started = false; } if (jcr->db) { db_close_database(jcr, jcr->db); jcr->db = NULL; } free_and_null_pool_memory(jcr->stime); free_and_null_pool_memory(jcr->fname); free_and_null_pool_memory(jcr->pool_source); free_and_null_pool_memory(jcr->catalog_source); free_and_null_pool_memory(jcr->rpool_source); free_and_null_pool_memory(jcr->wstore_source); free_and_null_pool_memory(jcr->rstore_source); /* Delete lists setup to hold storage pointers */ free_rwstorage(jcr); jcr->job_end_push.destroy(); if (jcr->JobId != 0) write_state_file(director->working_directory, "bacula-dir", get_first_port_host_order(director->DIRaddrs)); free_plugins(jcr); /* release instantiated plugins */ Dmsg0(200, "End dird free_jcr\n"); }
void net_loop (int flags, int (*is_end)(void)) { while (!is_end ()) { struct pollfd fds[101]; int cc = 0; if (flags & 3) { fds[0].fd = 0; fds[0].events = POLLIN; cc ++; } write_state_file (); int x = connections_make_poll_array (fds + cc, 101 - cc) + cc; double timer = next_timer_in (); if (timer > 1000) { timer = 1000; } if (poll (fds, x, timer) < 0) { work_timers (); continue; } work_timers (); if ((flags & 3) && (fds[0].revents & POLLIN)) { unread_messages = 0; if (flags & 1) { rl_callback_read_char (); } else { char *line = 0; size_t len = 0; assert (getline (&line, &len, stdin) >= 0); got_it (line, strlen (line)); } } connections_poll_result (fds + cc, x - cc); if (unknown_user_list_pos) { do_get_user_list_info_silent (unknown_user_list_pos, unknown_user_list); unknown_user_list_pos = 0; } } }
int main(int argc, char *argv[]) { char map[20],path1[30],path2[30]; int dir; int i,j; int ghost_p1[4][2],pacman1_x,pacman1_y,ghost_p2[4][2],pacman2_x,pacman2_y; FILE *fp; if(argc!=4) { printf("\nUsage: <executable> <map> <bot1> <bot2>"); exit(1); } strcpy(map,argv[1]); strcpy(bot1,argv[2]); strcpy(bot2,argv[3]); printf("\n%s Vs %s\n",bot1,bot2); read_state(map); //map_state1 /* printf("\nmapstate1\n"); for (i=0;i<map_row;i++) { for(j=0;j<map_col;j++) { printf("%c ",map_state1[i][j]); } printf("\n"); }*/ /*create directories for each bot*/ mkdir(bot1,0777); mkdir(bot2,0777); write_state_file(); get_current_positions(ghost_p1, &pacman1_x,&pacman1_y,ghost_p2, &pacman2_x,&pacman2_y); /*store initial ghost positions*/ for(i=0;i<4;i++) { init_ghost_p1[i][0]=ghost_p1[i][0]; init_ghost_p2[i][0]=ghost_p2[i][0]; } write_trace(ghost_p1,pacman1_x,pacman1_y,ghost_p2,pacman2_x,pacman2_y,0,0); compile_bot(); //compile bots //execute 10*w*h times for(i=0;i<10*map_col*3;i++) { //printf("%d ",i); system("./aa_bot"); system("./bb_bot"); change_state(ghost_p1,pacman1_x,pacman1_y,ghost_p2, pacman2_x,pacman2_y);//to change the state according to move.txt in bot folders write_state_file(); get_current_positions(ghost_p1, &pacman1_x,&pacman1_y,ghost_p2, &pacman2_x,&pacman2_y); write_trace(ghost_p1,pacman1_x,pacman1_y,ghost_p2,pacman2_x,pacman2_y,score1,score2); } }