use sockets instead of pipes on Windows.
This commit was SVN r24174.
Этот коммит содержится в:
родитель
298a50ff3b
Коммит
ec82e73bce
@ -138,12 +138,21 @@ opal_event_base_t* opal_event_base_create(void)
|
|||||||
}
|
}
|
||||||
evbase = (opal_event_base_t*)malloc(sizeof(opal_event_base_t));
|
evbase = (opal_event_base_t*)malloc(sizeof(opal_event_base_t));
|
||||||
evbase->base = base;
|
evbase->base = base;
|
||||||
|
#ifndef __WINDOWS__
|
||||||
if (pipe(evbase->update_pipe) < 0) {
|
if (pipe(evbase->update_pipe) < 0) {
|
||||||
opal_output(0, "Unable to open update pipe");
|
opal_output(0, "Unable to open update pipe");
|
||||||
free(evbase);
|
free(evbase);
|
||||||
event_base_free(base);
|
event_base_free(base);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if (create_socketpair(AF_UNIX, SOCK_STREAM, 0, evbase->update_pipe) == -1) {
|
||||||
|
opal_output(0, "Unable to open update socket");
|
||||||
|
free(evbase);
|
||||||
|
event_base_free(base);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
event_assign(&evbase->update_event, base,
|
event_assign(&evbase->update_event, base,
|
||||||
evbase->update_pipe[0], EV_READ | EV_PERSIST,
|
evbase->update_pipe[0], EV_READ | EV_PERSIST,
|
||||||
update_event, NULL);
|
update_event, NULL);
|
||||||
@ -155,9 +164,15 @@ void opal_event_base_finalize(opal_event_base_t *evbase)
|
|||||||
{
|
{
|
||||||
/* delete the wakeup event */
|
/* delete the wakeup event */
|
||||||
event_del(&evbase->update_event);
|
event_del(&evbase->update_event);
|
||||||
|
#ifndef __WINDOWS__
|
||||||
/* close the pipe */
|
/* close the pipe */
|
||||||
close(evbase->update_pipe[0]);
|
close(evbase->update_pipe[0]);
|
||||||
close(evbase->update_pipe[1]);
|
close(evbase->update_pipe[1]);
|
||||||
|
#else
|
||||||
|
/* close the socket */
|
||||||
|
closesocket(evbase->update_pipe[0]);
|
||||||
|
closesocket(evbase->update_pipe[1]);
|
||||||
|
#endif
|
||||||
/* release the base */
|
/* release the base */
|
||||||
event_base_free(evbase->base);
|
event_base_free(evbase->base);
|
||||||
/* free the storage */
|
/* free the storage */
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user