added pre/postlude fn's for when OpenOCD is sleeping.

git-svn-id: svn://svn.berlios.de/openocd/trunk@765 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
oharboe 2008-07-07 08:05:07 +00:00
parent d6194d7356
commit b31d83c6c7
3 changed files with 14 additions and 24 deletions

View File

@ -18,16 +18,18 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/ ***************************************************************************/
/* implementations of OpenOCD that uses multithreading needs to lock OpenOCD while calling /* implementations of OpenOCD that uses multithreading needs to know when
* OpenOCD fn's. No-op in vanilla OpenOCD * OpenOCD is sleeping. No-op in vanilla OpenOCD
*/ */
void lockBigLock() void openocd_sleep_prelude()
{ {
} }
void unlockBigLock()
void openocd_sleep_postlude()
{ {
} }
/* /*
This is the main entry for developer PC hosted OpenOCD. This is the main entry for developer PC hosted OpenOCD.
@ -47,3 +49,4 @@ int main(int argc, char *argv[])
return openocd_main(argc, argv); return openocd_main(argc, argv);
} }

View File

@ -185,8 +185,6 @@ int handle_init_command(struct command_context_s *cmd_ctx, char *cmd, char **arg
return ERROR_OK; return ERROR_OK;
} }
void lockBigLock();
void unlockBigLock();
Jim_Interp *interp; Jim_Interp *interp;
command_context_t *active_cmd_ctx; command_context_t *active_cmd_ctx;
@ -445,8 +443,6 @@ static int Jim_Command_openocd_ignore(Jim_Interp *interp, int argc, Jim_Obj *con
int retval; int retval;
char *cmd = (char*)Jim_GetString(argv[1], NULL); char *cmd = (char*)Jim_GetString(argv[1], NULL);
lockBigLock();
Jim_Obj *tclOutput = Jim_NewStringObj(interp, "", 0); Jim_Obj *tclOutput = Jim_NewStringObj(interp, "", 0);
if (startLoop) if (startLoop)
@ -465,7 +461,6 @@ static int Jim_Command_openocd_ignore(Jim_Interp *interp, int argc, Jim_Obj *con
log_remove_callback(tcl_output, tclOutput); log_remove_callback(tcl_output, tclOutput);
Jim_SetResult(interp, tclOutput); Jim_SetResult(interp, tclOutput);
unlockBigLock();
return (ignore||(retval==ERROR_OK))?JIM_OK:JIM_ERR; return (ignore||(retval==ERROR_OK))?JIM_OK:JIM_ERR;
} }

View File

@ -246,8 +246,8 @@ int remove_services()
return ERROR_OK; return ERROR_OK;
} }
extern void lockBigLock(); extern void openocd_sleep_prelude();
extern void unlockBigLock(); extern void openocd_sleep_postlude();
int server_loop(command_context_t *command_context) int server_loop(command_context_t *command_context)
{ {
@ -266,13 +266,6 @@ int server_loop(command_context_t *command_context)
LOG_ERROR("couldn't set SIGPIPE to SIG_IGN"); LOG_ERROR("couldn't set SIGPIPE to SIG_IGN");
#endif #endif
// This function is reentrant(workaround for configuration problems)
static int lockCount=0;
if (lockCount++==0)
{
lockBigLock();
}
/* do regular tasks after at most 10ms */ /* do regular tasks after at most 10ms */
tv.tv_sec = 0; tv.tv_sec = 0;
tv.tv_usec = 10000; tv.tv_usec = 10000;
@ -316,10 +309,10 @@ int server_loop(command_context_t *command_context)
#endif #endif
#endif #endif
openocd_sleep_prelude();
// Only while we're sleeping we'll let others run // Only while we're sleeping we'll let others run
unlockBigLock();
retval = select(fd_max + 1, &read_fds, NULL, NULL, &tv); retval = select(fd_max + 1, &read_fds, NULL, NULL, &tv);
lockBigLock(); openocd_sleep_postlude();
if (retval == -1) if (retval == -1)
{ {
@ -421,10 +414,6 @@ int server_loop(command_context_t *command_context)
} }
#endif #endif
} }
if (--lockCount==0)
{
unlockBigLock();
}
return ERROR_OK; return ERROR_OK;
} }
@ -463,6 +452,7 @@ int server_init()
signal(SIGABRT, sig_handler); signal(SIGABRT, sig_handler);
#endif #endif
return ERROR_OK; return ERROR_OK;
} }
@ -493,3 +483,5 @@ int handle_shutdown_command(struct command_context_s *cmd_ctx, char *cmd, char *
return ERROR_COMMAND_CLOSE_CONNECTION; return ERROR_COMMAND_CLOSE_CONNECTION;
} }