1
1

use seperate thread rather than event handler

This commit was SVN r3745.
Этот коммит содержится в:
Tim Woodall 2004-12-07 23:43:24 +00:00
родитель 538e4cb510
Коммит be7ac2233b
2 изменённых файлов: 13 добавлений и 19 удалений

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

@ -125,7 +125,7 @@ struct mca_ptl_sm_component_t {
#if OMPI_HAVE_THREADS == 1
char sm_fifo_path[PATH_MAX]; /**< path to fifo used to signal this process */
int sm_fifo_fd; /**< file descriptor corresponding to opened fifo */
ompi_event_t sm_fifo_event; /**< event for callbacks on fifo activity */
ompi_thread_t sm_fifo_thread;
#endif
};
typedef struct mca_ptl_sm_component_t mca_ptl_sm_component_t;
@ -418,7 +418,7 @@ typedef struct mca_ptl_sm_exchange{
}mca_ptl_sm_exchange_t;
#if OMPI_HAVE_THREADS == 1
void mca_ptl_sm_component_event_handler(int sd, short flags, void* user);
void mca_ptl_sm_component_event_thread(ompi_object_t*);
#endif
#if OMPI_HAVE_THREADS == 1

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

@ -211,9 +211,9 @@ int mca_ptl_sm_component_close(void)
#if OMPI_HAVE_THREADS == 1
/* close/cleanup fifo create for event notification */
if(mca_ptl_sm_component.sm_fifo_fd >= 0) {
ompi_event_del(&mca_ptl_sm_component.sm_fifo_event);
close(mca_ptl_sm_component.sm_fifo_fd);
unlink(mca_ptl_sm_component.sm_fifo_path);
ompi_thread_join(&mca_ptl_sm_component.sm_fifo_thread, NULL);
}
#endif
@ -266,13 +266,9 @@ mca_ptl_base_module_t** mca_ptl_sm_component_init(
return NULL;
}
memset(&mca_ptl_sm_component.sm_fifo_event, 0, sizeof(ompi_event_t));
ompi_event_set(&mca_ptl_sm_component.sm_fifo_event,
mca_ptl_sm_component.sm_fifo_fd,
OMPI_EV_READ|OMPI_EV_PERSIST,
mca_ptl_sm_component_event_handler,
NULL);
ompi_event_add(&mca_ptl_sm_component.sm_fifo_event, NULL);
OBJ_CONSTRUCT(&mca_ptl_sm_component.sm_fifo_thread, ompi_thread_t);
mca_ptl_sm_component.sm_fifo_thread.t_run = mca_ptl_sm_component_event_thread;
ompi_thread_start(&mca_ptl_sm_component.sm_fifo_thread);
#endif
/* allocate the Shared Memory PTL */
@ -332,15 +328,14 @@ int mca_ptl_sm_component_control(int param, void* value, size_t size)
*/
#if OMPI_HAVE_THREADS == 1
void mca_ptl_sm_component_event_handler(int sd, short flags, void* user)
void mca_ptl_sm_component_event_thread(ompi_object_t* thread)
{
unsigned char cmd;
int rc;
mca_ptl_sm_component_progress(0);
if(read(sd, &cmd, sizeof(cmd)) != sizeof(cmd)) {
ompi_output(0, "mca_ptl_sm_component_event_handler: read failed, errno=%d\n",
errno);
ompi_event_del(&mca_ptl_sm_component.sm_fifo_event);
while(1) {
unsigned char cmd;
if(read(mca_ptl_sm_component.sm_fifo_fd, &cmd, sizeof(cmd)) != sizeof(cmd)) {
return;
}
mca_ptl_sm_component_progress(0);
}
}
#endif
@ -631,7 +626,6 @@ int mca_ptl_sm_component_progress(mca_ptl_tstamp_t tstamp)
OMPI_THREAD_UNLOCK(&(mca_ptl_sm_component.sm_pending_ack_lock));
}
return return_status;
}