ext/libuv/src/unix/os390-syscalls.c in libuv-4.0.1 vs ext/libuv/src/unix/os390-syscalls.c in libuv-4.0.2

- old
+ new

@@ -23,12 +23,10 @@ #include "os390-syscalls.h" #include <errno.h> #include <stdlib.h> #include <assert.h> #include <search.h> -#include <termios.h> -#include <sys/msg.h> #define CW_CONDVAR 32 #pragma linkage(BPX4CTW, OS) #pragma linkage(BPX1CTW, OS) @@ -103,65 +101,27 @@ static void maybe_resize(uv__os390_epoll* lst, unsigned int len) { unsigned int newsize; unsigned int i; struct pollfd* newlst; - struct pollfd event; if (len <= lst->size) return; - if (lst->size == 0) - event.fd = -1; - else { - /* Extract the message queue at the end. */ - event = lst->items[lst->size - 1]; - lst->items[lst->size - 1].fd = -1; - } - newsize = next_power_of_two(len); newlst = uv__realloc(lst->items, newsize * sizeof(lst->items[0])); if (newlst == NULL) abort(); for (i = lst->size; i < newsize; ++i) newlst[i].fd = -1; - /* Restore the message queue at the end */ - newlst[newsize - 1] = event; - lst->items = newlst; lst->size = newsize; } -static void init_message_queue(uv__os390_epoll* lst) { - struct { - long int header; - char body; - } msg; - - /* initialize message queue */ - lst->msg_queue = msgget(IPC_PRIVATE, 0622 | IPC_CREAT); - if (lst->msg_queue == -1) - abort(); - - /* - On z/OS, the message queue will be affiliated with the process only - when a send is performed on it. Once this is done, the system - can be queried for all message queues belonging to our process id. - */ - msg.header = 1; - if (msgsnd(lst->msg_queue, &msg, sizeof(msg.body), 0) != 0) - abort(); - - /* Clean up the dummy message sent above */ - if (msgrcv(lst->msg_queue, &msg, sizeof(msg.body), 0, 0) != sizeof(msg.body)) - abort(); -} - - static void before_fork(void) { uv_mutex_lock(&global_epoll_lock); } @@ -177,17 +137,12 @@ /* reset once */ memcpy(&once, &child_once, sizeof(child_once)); /* reset epoll list */ while (!QUEUE_EMPTY(&global_epoll_queue)) { - uv__os390_epoll* lst; q = QUEUE_HEAD(&global_epoll_queue); QUEUE_REMOVE(q); - lst = QUEUE_DATA(q, uv__os390_epoll, member); - uv__free(lst->items); - lst->items = NULL; - lst->size = 0; } uv_mutex_unlock(&global_epoll_lock); uv_mutex_destroy(&global_epoll_lock); } @@ -209,15 +164,10 @@ lst = uv__malloc(sizeof(*lst)); if (lst != NULL) { /* initialize list */ lst->size = 0; lst->items = NULL; - init_message_queue(lst); - maybe_resize(lst, 1); - lst->items[lst->size - 1].fd = lst->msg_queue; - lst->items[lst->size - 1].events = POLLIN; - lst->items[lst->size - 1].revents = 0; uv_once(&once, epoll_init); uv_mutex_lock(&global_epoll_lock); QUEUE_INSERT_TAIL(&global_epoll_queue, &lst->member); uv_mutex_unlock(&global_epoll_lock); } @@ -230,33 +180,27 @@ int op, int fd, struct epoll_event *event) { uv_mutex_lock(&global_epoll_lock); - if (op == EPOLL_CTL_DEL) { + if(op == EPOLL_CTL_DEL) { if (fd >= lst->size || lst->items[fd].fd == -1) { uv_mutex_unlock(&global_epoll_lock); errno = ENOENT; return -1; } lst->items[fd].fd = -1; - } else if (op == EPOLL_CTL_ADD) { - - /* Resizing to 'fd + 1' would expand the list to contain at least - * 'fd'. But we need to guarantee that the last index on the list - * is reserved for the message queue. So specify 'fd + 2' instead. - */ - maybe_resize(lst, fd + 2); + } else if(op == EPOLL_CTL_ADD) { + maybe_resize(lst, fd + 1); if (lst->items[fd].fd != -1) { uv_mutex_unlock(&global_epoll_lock); errno = EEXIST; return -1; } lst->items[fd].fd = fd; lst->items[fd].events = event->events; - lst->items[fd].revents = 0; - } else if (op == EPOLL_CTL_MOD) { + } else if(op == EPOLL_CTL_MOD) { if (fd >= lst->size || lst->items[fd].fd == -1) { uv_mutex_unlock(&global_epoll_lock); errno = ENOENT; return -1; } @@ -269,23 +213,21 @@ } int epoll_wait(uv__os390_epoll* lst, struct epoll_event* events, int maxevents, int timeout) { - nmsgsfds_t size; + size_t size; struct pollfd* pfds; int pollret; int reventcount; - size = _SET_FDS_MSGS(size, 1, lst->size - 1); + size = lst->size; pfds = lst->items; pollret = poll(pfds, size, timeout); if (pollret <= 0) return pollret; - pollret = _NFDS(pollret) + _NMSGS(pollret); - reventcount = 0; for (int i = 0; i < lst->size && i < maxevents && reventcount < pollret; ++i) { struct epoll_event ev; @@ -317,17 +259,12 @@ uv_mutex_unlock(&global_epoll_lock); return 0; } void epoll_queue_close(uv__os390_epoll* lst) { - /* Remove epoll instance from global queue */ uv_mutex_lock(&global_epoll_lock); QUEUE_REMOVE(&lst->member); uv_mutex_unlock(&global_epoll_lock); - - /* Free resources */ - msgctl(lst->msg_queue, IPC_RMID, NULL); - lst->msg_queue = -1; uv__free(lst->items); lst->items = NULL; }