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;
}