1
1
- orte_debugger_init_after_spawn was not being called for debuggers that
   use the MPIR_attach_fifo to co-locate debugger daemons.
 - MPIR_Breakpoint was not getting called if a debugger reattached. Add
   a job state (ORTE_JOB_STATE_DEBUGGER_DETACH) to reset mpir_breakpoint_fired
   to false when a debugger detaches to ensure MPIR_Breakpoint is called if
   another debugger attaches. Tested with STAT 2.0/launchmon 1.0.

cmr:v1.7

This commit was SVN r28665.
Этот коммит содержится в:
Nathan Hjelm 2013-06-20 16:18:05 +00:00
родитель b9ca8e3cd1
Коммит 299d5b3dd7
3 изменённых файлов: 23 добавлений и 1 удалений

Просмотреть файл

@ -124,6 +124,7 @@ typedef int32_t orte_job_state_t;
#define ORTE_JOB_STATE_REGISTERED 15 /* all procs registered for sync */
#define ORTE_JOB_STATE_READY_FOR_DEBUGGERS 16 /* job ready for debugger init after spawn */
#define ORTE_JOB_STATE_LOCAL_LAUNCH_COMPLETE 17 /* all local procs have attempted launch */
#define ORTE_JOB_STATE_DEBUGGER_DETACH 18 /* a debugger has detached */
/*
* Define a "boundary" so we can easily and quickly determine

Просмотреть файл

@ -476,7 +476,11 @@ void orte_state_base_track_procs(int fd, short argc, void *cbdata)
pdata->state = state;
jdata->num_launched++;
if (jdata->num_launched == jdata->num_procs) {
ORTE_ACTIVATE_JOB_STATE(jdata, ORTE_JOB_STATE_RUNNING);
if (jdata->controls & ORTE_JOB_CONTROL_DEBUGGER_DAEMON) {
ORTE_ACTIVATE_JOB_STATE(jdata, ORTE_JOB_STATE_READY_FOR_DEBUGGERS);
} else {
ORTE_ACTIVATE_JOB_STATE(jdata, ORTE_JOB_STATE_RUNNING);
}
}
} else if (ORTE_PROC_STATE_REGISTERED == state) {
/* update the proc state */
@ -723,6 +727,10 @@ void orte_state_base_check_all_complete(int fd, short args, void *cbdata)
* is maintained!
*/
if (1 < j) {
if (jdata->controls & ORTE_JOB_CONTROL_DEBUGGER_DAEMON) {
/* this was a debugger daemon. notify that a debugger has detached */
ORTE_ACTIVATE_JOB_STATE(jdata, ORTE_JOB_STATE_DEBUGGER_DETACH);
}
opal_pointer_array_set_item(orte_job_data, j, NULL); /* ensure the array has a NULL */
OBJ_RELEASE(jdata);
}

Просмотреть файл

@ -129,6 +129,7 @@ int MPIR_force_to_main = 0;
static void orte_debugger_dump(void);
static void orte_debugger_init_before_spawn(orte_job_t *jdata);
static void orte_debugger_init_after_spawn(int fd, short event, void *arg);
static void orte_debugger_detached(int fd, short event, void *arg);
static void attach_debugger(int fd, short event, void *arg);
static void build_debugger_args(orte_app_context_t *debugger);
static void open_fifo (void);
@ -988,6 +989,9 @@ int orterun(int argc, char *argv[])
orte_state.add_job_state(ORTE_JOB_STATE_READY_FOR_DEBUGGERS,
orte_debugger_init_after_spawn,
ORTE_SYS_PRI);
orte_state.add_job_state(ORTE_JOB_STATE_DEBUGGER_DETACH,
orte_debugger_detached,
ORTE_SYS_PRI);
if (orte_staged_execution) {
/* staged execution is requested - each app_context
@ -2909,6 +2913,15 @@ void orte_debugger_init_after_spawn(int fd, short event, void *cbdata)
OBJ_RELEASE(caddy);
}
static void orte_debugger_detached(int fd, short event, void *cbdata)
{
orte_state_caddy_t *caddy = (orte_state_caddy_t*)cbdata;
OBJ_RELEASE(caddy);
/* need to ensure MPIR_Breakpoint is called again if another debugger attaches */
mpir_breakpoint_fired = false;
}
static void open_fifo (void)
{
opal_event_t *attach;