mirror of
https://github.com/cemu-project/idapython.git
synced 2024-11-24 01:59:18 +01:00
bugfix: Previous implementation set_script_timeout() was causing the script wait dialog box to open and never close upon the invocation of callbacks (add_menu_item callback or other callbacks) that take longer than the timeout value.
This commit is contained in:
parent
7179b2c654
commit
a52b90c771
34
python.cpp
34
python.cpp
@ -128,8 +128,8 @@ static bool g_ui_ready = false;
|
||||
static bool g_alert_auto_scripts = true;
|
||||
static bool g_remove_cwd_sys_path = false;
|
||||
|
||||
void end_execution();
|
||||
void begin_execution();
|
||||
static void end_execution();
|
||||
static void begin_execution();
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// This callback is called on various interpreter events
|
||||
@ -159,29 +159,36 @@ static int break_check(PyObject *obj, _frame *frame, int what, PyObject *arg)
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
static void reset_execution_time()
|
||||
{
|
||||
start_time = time(NULL);
|
||||
ninsns = 0;
|
||||
}
|
||||
// Prepare for Python execution
|
||||
void begin_execution()
|
||||
static void begin_execution()
|
||||
{
|
||||
if ( !g_ui_ready || script_timeout == 0 )
|
||||
return;
|
||||
|
||||
ninsns = 0;
|
||||
end_execution();
|
||||
box_displayed = false;
|
||||
start_time = time(NULL);
|
||||
reset_execution_time();
|
||||
PyEval_SetTrace(break_check, NULL);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// Called after Python execution finishes
|
||||
void end_execution()
|
||||
static void hide_script_waitbox()
|
||||
{
|
||||
if ( box_displayed )
|
||||
{
|
||||
hide_wait_box();
|
||||
box_displayed = false;
|
||||
}
|
||||
}
|
||||
|
||||
static void end_execution()
|
||||
{
|
||||
hide_script_waitbox();
|
||||
#ifdef ENABLE_PYTHON_PROFILING
|
||||
PyEval_SetTrace(tracefunc, NULL);
|
||||
#else
|
||||
@ -191,15 +198,18 @@ void end_execution()
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// Exported to the Python environment
|
||||
void disable_script_timeout()
|
||||
{
|
||||
script_timeout = 0;
|
||||
end_execution();
|
||||
}
|
||||
|
||||
int set_script_timeout(int timeout)
|
||||
{
|
||||
if ( timeout == 0 )
|
||||
end_execution();
|
||||
|
||||
qswap(timeout, script_timeout);
|
||||
|
||||
if ( script_timeout != 0 )
|
||||
begin_execution();
|
||||
reset_execution_time();
|
||||
hide_script_waitbox();
|
||||
return timeout;
|
||||
}
|
||||
|
||||
|
@ -2911,7 +2911,7 @@ def AskAddr(defval, prompt):
|
||||
"""
|
||||
Ask the user to enter an address
|
||||
|
||||
@param defval: the default address value. This value
|
||||
@param defval: a string designating the default address value. This value
|
||||
will appear in the dialog box.
|
||||
@param prompt: the prompt to display in the dialog box
|
||||
|
||||
@ -2924,7 +2924,7 @@ def AskLong(defval, prompt):
|
||||
"""
|
||||
Ask the user to enter a number
|
||||
|
||||
@param defval: the default value. This value
|
||||
@param defval: a number designating the default value. This value
|
||||
will appear in the dialog box.
|
||||
@param prompt: the prompt to display in the dialog box
|
||||
|
||||
|
@ -2320,7 +2320,8 @@ idainfo *get_inf_structure(void)
|
||||
#<pydoc>
|
||||
def set_script_timeout(timeout):
|
||||
"""
|
||||
Changes the script timeout value.
|
||||
Changes the script timeout value. The script wait box dialog will be hidden and shown again when the timeout elapses.
|
||||
See also L{disable_script_timeout}.
|
||||
@param timeout: This value is in seconds.
|
||||
If this value is set to zero then the script will never timeout.
|
||||
@return: returns the old timeout value
|
||||
@ -2331,6 +2332,18 @@ def set_script_timeout(timeout):
|
||||
int set_script_timeout(int timeout);
|
||||
/*
|
||||
#<pydoc>
|
||||
def disable_script_timeout():
|
||||
"""
|
||||
Disables the script timeout and hides the script wait box.
|
||||
Calling L{set_script_timeout} will not have any effects until the script is compiled and executed again
|
||||
@return: None
|
||||
"""
|
||||
pass
|
||||
#</pydoc>
|
||||
*/
|
||||
void disable_script_timeout();
|
||||
/*
|
||||
#<pydoc>
|
||||
def enable_extlang_python(enable):
|
||||
"""
|
||||
Enables or disables Python extlang.
|
||||
|
Loading…
Reference in New Issue
Block a user