BufferList::BufferList() : head(NULL), tail(NULL) { mtx = qmutex_create(); }
disp_request_t(Dispatcher disp) : _disp(disp) {mtx = qmutex_create();};
//-------------------------------------------------------------------------- static inline bool srv_lock_init(void) { g_lock = qmutex_create(); return g_lock != NULL; }
//-------------------------------------------------------------------------- // debugger remote server - TCP/IP mode int NT_CDECL main(int argc, char *argv[]) { int port_number = DEBUGGER_PORT_NUMBER; lprintf("IDA " SYSTEM SYSBITS " remote debug server(" __SERVER_TYPE__ ") v1.%d. Copyright HexRays 2004-2010\n", IDD_INTERFACE_VERSION); while ( argc > 1 && (argv[1][0] == '-' || argv[1][0] == '/')) { switch ( argv[1][1] ) { case 'p': port_number = atoi(&argv[1][2]); break; case 'P': server_password = argv[1] + 2; break; case 'v': verbose = true; break; default: error("usage: ida_remote [switches]\n" " -p... port number\n" " -P... password\n" " -v verbose\n"); } argv++; argc--; } // call the debugger module to initialize its subsystem once if ( !init_subsystem() #ifndef __SINGLE_THREADED_SERVER__ || ((g_lock = qmutex_create())== NULL) #endif ) { lprintf("Could not initialize subsystem!"); return -1; } #ifndef __NT__ signal(SIGHUP, shutdown_gracefully); #endif signal(SIGINT, shutdown_gracefully); signal(SIGTERM, shutdown_gracefully); signal(SIGSEGV, shutdown_gracefully); // signal(SIGPIPE, SIG_IGN); if ( !init_irs_layer() ) { neterr(NULL, "init_sockets"); } listen_socket = socket(AF_INET, SOCK_STREAM, 0); if ( listen_socket == -1 ) neterr(NULL, "socket"); setup_irs((idarpc_stream_t*)listen_socket); struct sockaddr_in sa; memset(&sa, 0, sizeof(sa)); sa.sin_family = AF_INET; sa.sin_port = qhtons(short(port_number)); if ( bind(listen_socket, (sockaddr *)&sa, sizeof(sa)) == SOCKET_ERROR ) neterr((idarpc_stream_t *)listen_socket, "bind"); if ( listen(listen_socket, SOMAXCONN) == SOCKET_ERROR ) neterr((idarpc_stream_t *)listen_socket, "listen"); hostent *local_host = gethostbyname(""); if ( local_host != NULL ) { const char *local_ip = inet_ntoa (*(struct in_addr *)*local_host->h_addr_list); if ( local_host->h_name != NULL && local_ip != NULL ) lprintf("Host %s (%s): ", local_host->h_name, local_ip); else if ( local_ip != NULL ) lprintf("Host %s: ", local_ip); } lprintf("Listening on port #%u...\n", port_number); while ( true ) { sockaddr_in sa; socklen_t salen = sizeof(sa); SOCKET rpc_socket = accept(listen_socket, (sockaddr *)&sa, &salen); if ( rpc_socket == -1 ) neterr((idarpc_stream_t *)listen_socket, "accept"); #if defined(__LINUX__) && defined(LIBWRAP) const char *p; if ( (p=check_connection(rpc_socket)) != NULL ) { fprintf(stderr, "ida-server CONNECTION REFUSED from %s (tcp_wrappers)\n", p); shutdown(rpc_socket, 2); close(rpc_socket); continue; } #endif // defined(__LINUX__) && defined(LIBWRAP) rpc_server_t *server = new rpc_server_t(rpc_socket); server->verbose = verbose; server->set_debugger_instance(create_debug_session()); handle_session(server); } /* NOTREACHED term_subsystem(); #ifndef __SINGLE_THREADED_SERVER__ qmutex_free(g_lock); #endif */ }
//-------------------------------------------------------------------------- static bool init_lock(void) { g_mutex = qmutex_create(); return g_mutex != NULL; }