| Index: runtime/bin/eventhandler_fuchsia.h
|
| diff --git a/runtime/bin/eventhandler_fuchsia.h b/runtime/bin/eventhandler_fuchsia.h
|
| index acd47937460dd17a2edf7dc5f2c16f3322e58fea..545fdb8fab4acf53bf4259ab3d35b087b331e325 100644
|
| --- a/runtime/bin/eventhandler_fuchsia.h
|
| +++ b/runtime/bin/eventhandler_fuchsia.h
|
| @@ -10,7 +10,9 @@
|
| #endif
|
|
|
| #include <errno.h>
|
| -#include <magenta/syscalls.h>
|
| +#include <sys/epoll.h>
|
| +#include <sys/socket.h>
|
| +#include <unistd.h>
|
|
|
| #include "platform/signal_blocker.h"
|
|
|
| @@ -23,8 +25,11 @@ class DescriptorInfo : public DescriptorInfoBase {
|
|
|
| virtual ~DescriptorInfo() {}
|
|
|
| + intptr_t GetPollEvents();
|
| +
|
| virtual void Close() {
|
| - VOID_TEMP_FAILURE_RETRY(close(fd_));
|
| + // Should be VOID_TEMP_FAILURE_RETRY
|
| + VOID_NO_RETRY_EXPECTED(close(fd_));
|
| fd_ = -1;
|
| }
|
|
|
| @@ -53,57 +58,37 @@ class DescriptorInfoMultiple
|
| DISALLOW_COPY_AND_ASSIGN(DescriptorInfoMultiple);
|
| };
|
|
|
| -// Information needed to call mx_handle_wait_many(), and to handle events.
|
| -class MagentaWaitManyInfo {
|
| - public:
|
| - MagentaWaitManyInfo();
|
| - ~MagentaWaitManyInfo();
|
| -
|
| - intptr_t capacity() const { return capacity_; }
|
| - intptr_t size() const { return size_; }
|
| - DescriptorInfo** descriptor_infos() const { return descriptor_infos_; }
|
| - mx_wait_item_t* items() const { return items_; }
|
| -
|
| - void AddHandle(mx_handle_t handle, mx_signals_t signals, DescriptorInfo* di);
|
| - void RemoveHandle(mx_handle_t handle);
|
| -
|
| - private:
|
| - static const intptr_t kInitialCapacity = 32;
|
| -
|
| - void GrowArraysIfNeeded(intptr_t desired_size);
|
| -
|
| - intptr_t capacity_;
|
| - intptr_t size_;
|
| - DescriptorInfo** descriptor_infos_;
|
| - mx_wait_item_t* items_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(MagentaWaitManyInfo);
|
| -};
|
| -
|
| class EventHandlerImplementation {
|
| public:
|
| EventHandlerImplementation();
|
| ~EventHandlerImplementation();
|
|
|
| + void UpdateEpollInstance(intptr_t old_mask, DescriptorInfo* di);
|
| +
|
| + // Gets the socket data structure for a given file
|
| + // descriptor. Creates a new one if one is not found.
|
| + DescriptorInfo* GetDescriptorInfo(intptr_t fd, bool is_listening);
|
| void SendData(intptr_t id, Dart_Port dart_port, int64_t data);
|
| void Start(EventHandler* handler);
|
| void Shutdown();
|
|
|
| - const MagentaWaitManyInfo& info() const { return info_; }
|
| -
|
| private:
|
| + static void Poll(uword args);
|
| + static void* GetHashmapKeyFromFd(intptr_t fd);
|
| + static uint32_t GetHashmapHashFromFd(intptr_t fd);
|
| +
|
| int64_t GetTimeout() const;
|
| - void HandleEvents();
|
| + void HandleEvents(struct epoll_event* events, int size);
|
| void HandleTimeout();
|
| void WakeupHandler(intptr_t id, Dart_Port dart_port, int64_t data);
|
| + intptr_t GetPollEvents(intptr_t events, DescriptorInfo* di);
|
| void HandleInterruptFd();
|
| - static void Poll(uword args);
|
|
|
| + HashMap socket_map_;
|
| TimeoutQueue timeout_queue_;
|
| bool shutdown_;
|
| - mx_handle_t interrupt_handles_[2];
|
| -
|
| - MagentaWaitManyInfo info_;
|
| + int interrupt_fds_[2];
|
| + int epoll_fd_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(EventHandlerImplementation);
|
| };
|
|
|