X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fserver%2Fserver.c;h=db61b1a52ee593cc146d28b5006c9171a032b251;hp=21a8ebabaa1827e06f3356041cd713348e185981;hb=0cba0d4df3fe120f08945703506f8405760325c9;hpb=0d4f8fc824c1d07cf385b13483f703456322d4ae diff --git a/src/server/server.c b/src/server/server.c index 21a8ebabaa..db61b1a52e 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -2,6 +2,12 @@ * Copyright (C) 2005 by Dominic Rath * * Dominic.Rath@gmx.de * * * + * Copyright (C) 2007,2008 Øyvind Harboe * + * oyvind.harboe@zylin.com * + * * + * Copyright (C) 2008 by Spencer Oliver * + * spen@spen-soft.co.uk * + * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * @@ -219,7 +225,7 @@ int remove_service(unsigned short port) return ERROR_OK; } -int remove_services() +int remove_services(void) { service_t *c = services; @@ -246,8 +252,8 @@ int remove_services() return ERROR_OK; } -extern void lockBigLock(); -extern void unlockBigLock(); +extern void openocd_sleep_prelude(void); +extern void openocd_sleep_postlude(void); int server_loop(command_context_t *command_context) { @@ -266,13 +272,6 @@ int server_loop(command_context_t *command_context) LOG_ERROR("couldn't set SIGPIPE to SIG_IGN"); #endif - // This function is reentrant(workaround for configuration problems) - static int lockCount=0; - if (lockCount++==0) - { - lockBigLock(); - } - /* do regular tasks after at most 10ms */ tv.tv_sec = 0; tv.tv_usec = 10000; @@ -310,16 +309,17 @@ int server_loop(command_context_t *command_context) } #ifndef _WIN32 -#ifndef BUILD_ECOSBOARD +#if BUILD_ECOSBOARD == 0 /* add STDIN to read_fds */ FD_SET(fileno(stdin), &read_fds); #endif #endif + openocd_sleep_prelude(); + kept_alive(); // Only while we're sleeping we'll let others run - unlockBigLock(); retval = select(fd_max + 1, &read_fds, NULL, NULL, &tv); - lockBigLock(); + openocd_sleep_postlude(); if (retval == -1) { @@ -349,6 +349,7 @@ int server_loop(command_context_t *command_context) } target_call_timer_callbacks(); + process_jim_events (); if (retval == 0) { @@ -403,7 +404,7 @@ int server_loop(command_context_t *command_context) } #ifndef _WIN32 -#ifndef BUILD_ECOSBOARD +#if BUILD_ECOSBOARD == 0 if (FD_ISSET(fileno(stdin), &read_fds)) { if (getc(stdin) == 'x') @@ -421,10 +422,6 @@ int server_loop(command_context_t *command_context) } #endif } - if (--lockCount==0) - { - unlockBigLock(); - } return ERROR_OK; } @@ -432,16 +429,16 @@ int server_loop(command_context_t *command_context) #ifdef _WIN32 BOOL WINAPI ControlHandler(DWORD dwCtrlType) { - shutdown_openocd = 1; - return TRUE; + shutdown_openocd = 1; + return TRUE; } void sig_handler(int sig) { - shutdown_openocd = 1; + shutdown_openocd = 1; } #endif -int server_init() +int server_init(void) { #ifdef _WIN32 WORD wVersionRequested; @@ -467,7 +464,7 @@ int server_init() return ERROR_OK; } -int server_quit() +int server_quit(void) { remove_services(); @@ -494,5 +491,3 @@ int handle_shutdown_command(struct command_context_s *cmd_ctx, char *cmd, char * return ERROR_COMMAND_CLOSE_CONNECTION; } - -