555bbf0c02
1. modify the iof to track when a proc actually closes all of its open iof output pipes. When this occurs, notify the odls that the proc's iof is complete. This is done via a zero-time event so that we can step out of the read event before processing the notification. 2. in the odls, modify the waitpid callback so it only flags that it was called. Add a function to receive the iof-complete notification, and a function that checks for both iof complete and waitpid callback before declaring a proc fully terminated. This ensures that we read and deliver -all- of the IO prior to declaring the job complete. Also modified the odls call to orte_iof.close (and the component's implementation) so it only closes stdin, leaving the other io channels alone. This fixes the other half of the known problem. This should fix the ticket on this subject, but I'll wait to close it pending further testing in the trunk. This commit was SVN r19991.
87 строки
2.0 KiB
C
87 строки
2.0 KiB
C
/*
|
|
* Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
|
|
* University Research and Technology
|
|
* Corporation. All rights reserved.
|
|
* Copyright (c) 2004-2006 The University of Tennessee and The University
|
|
* of Tennessee Research Foundation. All rights
|
|
* reserved.
|
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
* University of Stuttgart. All rights reserved.
|
|
* Copyright (c) 2004-2005 The Regents of the University of California.
|
|
* All rights reserved.
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
/** @file:
|
|
*/
|
|
|
|
#ifndef MCA_ODLS_BASE_H
|
|
#define MCA_ODLS_BASE_H
|
|
|
|
/*
|
|
* includes
|
|
*/
|
|
#include "orte_config.h"
|
|
|
|
#include "opal/mca/mca.h"
|
|
#include "opal/class/opal_list.h"
|
|
|
|
#include "orte/mca/odls/odls.h"
|
|
|
|
|
|
BEGIN_C_DECLS
|
|
|
|
/**
|
|
* Open the odls framework
|
|
*/
|
|
ORTE_DECLSPEC int orte_odls_base_open(void);
|
|
|
|
#if !ORTE_DISABLE_FULL_SUPPORT
|
|
|
|
/**
|
|
* Struct to hold globals for the odls framework
|
|
*/
|
|
typedef struct orte_odls_base_t {
|
|
/* components are available */
|
|
bool components_available;
|
|
/* component has been selected */
|
|
bool selected;
|
|
/** List of opened components */
|
|
opal_list_t available_components;
|
|
/** selected component */
|
|
orte_odls_base_component_t selected_component;
|
|
} orte_odls_base_t;
|
|
|
|
/**
|
|
* Global instance of odls-wide framework data
|
|
*/
|
|
ORTE_DECLSPEC extern orte_odls_base_t orte_odls_base;
|
|
|
|
/*
|
|
* Global functions for MCA overall collective open and close
|
|
*/
|
|
|
|
/**
|
|
* Select an odls module
|
|
*/
|
|
ORTE_DECLSPEC int orte_odls_base_select(void);
|
|
|
|
/**
|
|
* Close the odls framework
|
|
*/
|
|
ORTE_DECLSPEC int orte_odls_base_finalize(void);
|
|
ORTE_DECLSPEC int orte_odls_base_close(void);
|
|
|
|
/* declare that external-to-odls completion criteria for a
|
|
* proc have been met
|
|
*/
|
|
ORTE_DECLSPEC void orte_odls_base_notify_iof_complete(int fd, short event, void *proc);
|
|
|
|
#endif /* ORTE_DISABLE_FULL_SUPPORT */
|
|
|
|
END_C_DECLS
|
|
#endif
|