123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798 |
- From 9d13e32e362ad3ce5169f49b7f0fe1d9380e558c Mon Sep 17 00:00:00 2001
- From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
- Date: Mon, 30 Sep 2019 13:32:35 +0200
- Subject: [PATCH] Rename poll.h into vm_poll.h to fix build failure on musl
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- musl libc redirects include of sys/poll.h to poll.h. But since poll.h is
- also a local header file, the musl libc header is never included. This
- leads to the following build failure:
- In file included from asyncsocket.c:73:0:
- .../host/i586-buildroot-linux-musl/sysroot/usr/include/sys/poll.h:1:2: warning: #warning redirecting incorrect #include <sys/poll.h> to <poll.h> [-Wcpp]
- #warning redirecting incorrect #include <sys/poll.h> to <poll.h>
- asyncsocket.c: In function ‘AsyncTCPSocketPollWork’:
- asyncsocket.c:2537:13: error: invalid use of undefined type ‘struct pollfd’
- pfd[i].fd = asock[i]->fd;
- ^
- asyncsocket.c:2537:13: error: dereferencing pointer to incomplete type ‘struct pollfd’
- asyncsocket.c:2538:13: error: invalid use of undefined type ‘struct pollfd’
- pfd[i].events = read ? POLLIN : POLLOUT;
- ^
- asyncsocket.c:2538:33: error: ‘POLLIN’ undeclared (first use in this function); did you mean ‘POLL_IN’?
- pfd[i].events = read ? POLLIN : POLLOUT;
- So rename poll.h into vm_poll.h as suggested by srowe in
- https://github.com/vmware/open-vm-tools/issues/359#issuecomment-533529956
- Fixes:
- - http://autobuild.buildroot.org/results/4f575ef42bbc4387a07e396205052b2da081c64d
- Fix #359
- Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
- [Upstream status: https://github.com/vmware/open-vm-tools/pull/383]
- ---
- lib/asyncsocket/asyncsocket.c | 4 +-
- lib/hgfsServer/hgfsServer.c | 2 +-
- lib/include/asyncsocket.h | 2 +-
- lib/include/poll.h | 330 --------------------
- lib/include/pollImpl.h | 2 +-
- lib/include/vm_poll.h | 330 ++++++++++++++++++++
- lib/rpcIn/rpcin.c | 2 +-
- 7 files changed, 336 insertions(+), 336 deletions(-)
- delete mode 100644 open-vm-tools/lib/include/poll.h
- create mode 100644 open-vm-tools/lib/include/vm_poll.h
- diff --git a/lib/asyncsocket/asyncsocket.c b/lib/asyncsocket/asyncsocket.c
- index 102638cc..01181a95 100644
- --- a/lib/asyncsocket/asyncsocket.c
- +++ b/lib/asyncsocket/asyncsocket.c
- @@ -69,8 +69,8 @@
- #else
- #include <stddef.h>
- #include <ctype.h>
- +#include <poll.h>
- #include <sys/types.h>
- -#include <sys/poll.h>
- #include <sys/socket.h>
- #include <sys/un.h>
- #include <netdb.h>
- @@ -86,7 +86,7 @@
- #include "random.h"
- #include "asyncsocket.h"
- #include "asyncSocketBase.h"
- -#include "poll.h"
- +#include "vm_poll.h"
- #include "log.h"
- #include "err.h"
- #include "hostinfo.h"
- diff --git a/lib/hgfsServer/hgfsServer.c b/lib/hgfsServer/hgfsServer.c
- index 46224551..fc691286 100644
- --- a/lib/hgfsServer/hgfsServer.c
- +++ b/lib/hgfsServer/hgfsServer.c
- @@ -48,7 +48,7 @@
- #include "hgfsServerOplock.h"
- #include "hgfsDirNotify.h"
- #include "userlock.h"
- -#include "poll.h"
- +#include "vm_poll.h"
- #include "mutexRankLib.h"
- #include "vm_basic_asm.h"
- #include "unicodeOperations.h"
- diff --git a/lib/include/asyncsocket.h b/lib/include/asyncsocket.h
- index 95a5e464..a4b4e5aa 100644
- --- a/lib/include/asyncsocket.h
- +++ b/lib/include/asyncsocket.h
- @@ -164,7 +164,7 @@ typedef struct AsyncSocket AsyncSocket;
- * Or the client can specify its favorite poll class and locking behavior.
- * Use of IVmdbPoll is only supported for regular sockets and for Attach.
- */
- -#include "poll.h"
- +#include "vm_poll.h"
- struct IVmdbPoll;
- typedef struct AsyncSocketPollParams {
- int flags; /* Default 0, only POLL_FLAG_NO_BULL is valid */
- diff --git a/lib/include/poll.h b/lib/include/poll.h
- deleted file mode 100644
- index 6acd4f35..00000000
- --- a/lib/include/poll.h
- +++ /dev/null
- @@ -1,330 +0,0 @@
- -/*********************************************************
- - * Copyright (C) 1998-2018 VMware, Inc. All rights reserved.
- - *
- - * This program is free software; you can redistribute it and/or modify it
- - * under the terms of the GNU Lesser General Public License as published
- - * by the Free Software Foundation version 2.1 and no later version.
- - *
- - * This program is distributed in the hope that it will be useful, but
- - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- - * or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public
- - * License for more details.
- - *
- - * You should have received a copy of the GNU Lesser General Public License
- - * along with this program; if not, write to the Free Software Foundation, Inc.,
- - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- - *
- - *********************************************************/
- -
- -/*********************************************************
- - * The contents of this file are subject to the terms of the Common
- - * Development and Distribution License (the "License") version 1.0
- - * and no later version. You may not use this file except in
- - * compliance with the License.
- - *
- - * You can obtain a copy of the License at
- - * http://www.opensource.org/licenses/cddl1.php
- - *
- - * See the License for the specific language governing permissions
- - * and limitations under the License.
- - *
- - *********************************************************/
- -
- -
- -#ifndef _POLL_H_
- -#define _POLL_H_
- -
- -#define INCLUDE_ALLOW_USERLEVEL
- -#define INCLUDE_ALLOW_VMCORE
- -#include "includeCheck.h"
- -
- -#include "vm_basic_types.h"
- -#include "vm_basic_defs.h"
- -#include "vmware.h"
- -#include "userlock.h"
- -
- -#if defined(__cplusplus)
- -extern "C" {
- -#endif
- -
- -#ifdef _WIN32
- -#define HZ 100
- -#elif defined linux
- -#include <asm/param.h>
- -#elif __APPLE__
- -#include <TargetConditionals.h>
- -/*
- - * Old SDKs don't define TARGET_OS_IPHONE at all.
- - * New ones define it to 0 on Mac OS X, 1 on iOS.
- - */
- -#if !defined(TARGET_OS_IPHONE) || TARGET_OS_IPHONE == 0
- -#include <sys/kernel.h>
- -#endif
- -#include <sys/poll.h>
- -#define HZ 100
- -#endif
- -#ifdef __ANDROID__
- -/*
- - * <poll.h> of android should be included, but its name is same
- - * with this file. So its content is put here to avoid conflict.
- - */
- -#include <asm/poll.h>
- -#define HZ 100
- -typedef unsigned int nfds_t;
- -int poll(struct pollfd *, nfds_t, long);
- -#endif
- -
- -
- -/*
- - * Poll event types: each type has a different reason for firing,
- - * or condition that must be met before firing.
- - */
- -
- -typedef enum {
- - /*
- - * Actual Poll queue types against which you can register callbacks.
- - */
- - POLL_VIRTUALREALTIME = -1, /* Negative because it doesn't have its own Q */
- - POLL_VTIME = 0,
- - POLL_REALTIME,
- - POLL_DEVICE,
- - POLL_MAIN_LOOP,
- - POLL_NUM_QUEUES
- -} PollEventType;
- -
- -
- -/*
- - * Classes of events
- - *
- - * These are the predefined classes. More can be declared
- - * with Poll_AllocClass().
- - */
- -
- -typedef enum PollClass {
- - POLL_CLASS_MAIN,
- - POLL_CLASS_PAUSE,
- - POLL_CLASS_IPC,
- - POLL_CLASS_CPT,
- - POLL_CLASS_MKS,
- - POLL_FIXED_CLASSES,
- - POLL_DEFAULT_FIXED_CLASSES,
- - /* Size enum to maximum */
- - POLL_MAX_CLASSES = 31,
- -} PollClass;
- -
- -/*
- - * Do not use; Special pseudo private poll class supported by
- - * PollDefault only
- - */
- -#define POLL_DEFAULT_CLASS_NET POLL_FIXED_CLASSES
- -#define POLL_DEFAULT_CS_NET PollClassSet_Singleton(POLL_DEFAULT_CLASS_NET)
- -
- -/*
- - * Each callback is registered in a set of classes
- - */
- -
- -typedef struct PollClassSet {
- - uintptr_t bits;
- -} PollClassSet;
- -
- -/* An empty PollClassSet. */
- -static INLINE PollClassSet
- -PollClassSet_Empty(void)
- -{
- - PollClassSet set = { 0 };
- - return set;
- -}
- -
- -/* A PollClassSet with the single member. */
- -static INLINE PollClassSet
- -PollClassSet_Singleton(PollClass c)
- -{
- - PollClassSet s = PollClassSet_Empty();
- -
- - ASSERT_ON_COMPILE(POLL_MAX_CLASSES < sizeof s.bits * 8);
- - ASSERT(c < POLL_MAX_CLASSES);
- -
- - s.bits = CONST3264U(1) << c;
- - return s;
- -}
- -
- -/* Combine two PollClassSets. */
- -static INLINE PollClassSet
- -PollClassSet_Union(PollClassSet lhs, PollClassSet rhs)
- -{
- - PollClassSet set;
- - set.bits = lhs.bits | rhs.bits;
- - return set;
- -}
- -
- -/* Add single class to PollClassSet. */
- -static INLINE PollClassSet
- -PollClassSet_Include(PollClassSet set, PollClass c)
- -{
- - return PollClassSet_Union(set, PollClassSet_Singleton(c));
- -}
- -
- -
- -#define POLL_CS_MAIN PollClassSet_Singleton(POLL_CLASS_MAIN)
- -#define POLL_CS_PAUSE PollClassSet_Union(POLL_CS_MAIN, \
- - PollClassSet_Singleton(POLL_CLASS_PAUSE))
- -#define POLL_CS_CPT PollClassSet_Union(POLL_CS_PAUSE, \
- - PollClassSet_Singleton(POLL_CLASS_CPT))
- -#define POLL_CS_IPC PollClassSet_Union(POLL_CS_CPT, \
- - PollClassSet_Singleton(POLL_CLASS_IPC))
- -#define POLL_CS_VMDB POLL_CS_PAUSE /* POLL_CLASS_VMDB is retired */
- -#define POLL_CS_MKS PollClassSet_Singleton(POLL_CLASS_MKS)
- -/*
- - * DANGER. You don't need POLL_CS_ALWAYS. Really. So don't use it.
- - */
- -#define POLL_CS_ALWAYS PollClassSet_Union(POLL_CS_CPT, POLL_CS_IPC)
- -
- -/*
- - * Poll class-set taxonomy:
- - * POLL_CS_MAIN
- - * - Unless you NEED another class, use POLL_CS_MAIN.
- - * POLL_CS_PAUSE
- - * - For callbacks that must occur even if the guest is paused.
- - * Most VMDB or Foundry commands are in this category.
- - * POLL_CS_CPT
- - * - Only for callbacks which can trigger intermediate Checkpoint
- - * transitions.
- - * The ONLY such callback is Migrate.
- - * POLL_CS_IPC
- - * - Only for callbacks which can contain Msg_(Post|Hint|Question)
- - * responses, and for signal handlers (why)?
- - * Vigor, VMDB, and Foundry can contain Msg_* responses.
- - * POLL_CS_MKS
- - * - Callback runs in MKS thread.
- - * POLL_CS_ALWAYS
- - * - Only for events that must be processed immediately.
- - * The ONLY such callback is OvhdMemVmxSizeCheck.
- - */
- -
- -
- -/*
- - * Poll_Callback flags
- - */
- -
- -#define POLL_FLAG_PERIODIC 0x01 // keep after firing
- -#define POLL_FLAG_REMOVE_AT_POWEROFF 0x02 // self-explanatory
- -#define POLL_FLAG_READ 0x04 // device is ready for reading
- -#define POLL_FLAG_WRITE 0x08 // device is ready for writing
- -#define POLL_FLAG_SOCKET 0x10 // device is a Windows socket
- -#define POLL_FLAG_NO_BULL 0x20 // callback does its own locking
- -#define POLL_FLAG_WINSOCK 0x40 // Winsock style write events
- -#define POLL_FLAG_FD 0x80 // device is a Windows file descriptor.
- -#define POLL_FLAG_ACCEPT_INVALID_FDS 0x100 // For broken 3rd party libs, e.g. curl
- -#define POLL_FLAG_THUNK_TO_WND 0x200 // thunk callback to window message loop
- -
- -
- -typedef void (*PollerFunction)(void *clientData);
- -typedef void (*PollerFireWrapper)(PollerFunction func,
- - void *funcData,
- - void *wrapperData);
- -typedef Bool (*PollerErrorFn)(const char *errorStr);
- -
- -/*
- - * Initialisers:
- - *
- - * For the sake of convenience, we declare the initialisers
- - * for custom implmentations here, even though the actual
- - * implementations are distinct from the core poll code.
- - */
- -
- -typedef struct PollOptions {
- - Bool locked; // Use internal MXUser for locking
- - Bool allowFullQueue; // Don't assert when device event queue is full.
- - VThreadID windowsMsgThread; // thread that processes Windows messages
- - PollerFireWrapper fireWrapperFn; // optional; may be useful for stats
- - void *fireWrapperData; // optional
- - PollerErrorFn errorFn; // optional; called upon unrecoverable error
- -} PollOptions;
- -
- -
- -void Poll_InitDefault(void);
- -void Poll_InitDefaultEx(const PollOptions *opts);
- -void Poll_InitGtk(void); // On top of glib for Linux
- -void Poll_InitCF(void); // On top of CoreFoundation for OSX
- -
- -
- -/*
- - * Functions
- - */
- -int Poll_SocketPair(Bool vmci, Bool stream, int fds[2]);
- -void Poll_Loop(Bool loop, Bool *exit, PollClass c);
- -void Poll_LoopTimeout(Bool loop, Bool *exit, PollClass c, int timeout);
- -Bool Poll_LockingEnabled(void);
- -void Poll_Exit(void);
- -
- -
- -/*
- - * Poll_Callback adds a callback regardless of whether an identical one exists.
- - * The exception to this rule is POLL_DEVICE callbacks: there is a maximum of
- - * one read and one write callback per fd.
- - *
- - * Poll_CallbackRemove removes one callback. If there are multiple identical
- - * callbacks, which one is removed is an implementation detail. Note that in
- - * the case of POLL_DEVICE and POLL_REALTIME callbacks, the fd/delay used to
- - * create the callback is not specified when removing, so all callbacks
- - * of those types with the same flags, function, and clientData are considered
- - * "identical" even if their fd/delay differed.
- - */
- -
- -VMwareStatus Poll_Callback(PollClassSet classSet,
- - int flags,
- - PollerFunction f,
- - void *clientData,
- - PollEventType type,
- - PollDevHandle info, // fd/microsec delay
- - MXUserRecLock *lck);
- -Bool Poll_CallbackRemove(PollClassSet classSet,
- - int flags,
- - PollerFunction f,
- - void *clientData,
- - PollEventType type);
- -Bool Poll_CallbackRemoveOneByCB(PollClassSet classSet,
- - int flags,
- - PollerFunction f,
- - PollEventType type,
- - void **clientData);
- -
- -void Poll_NotifyChange(PollClassSet classSet);
- -
- -/*
- - * Wrappers for Poll_Callback and Poll_CallbackRemove that present
- - * simpler subsets of those interfaces.
- - */
- -
- -VMwareStatus Poll_CB_Device(PollerFunction f,
- - void *clientData,
- - PollDevHandle device,
- - Bool periodic);
- -
- -Bool Poll_CB_DeviceRemove(PollerFunction f,
- - void *clientData,
- - Bool periodic);
- -
- -
- -VMwareStatus Poll_CB_RTime(PollerFunction f,
- - void *clientData,
- - int64 delay, // microseconds
- - Bool periodic,
- - MXUserRecLock *lock);
- -
- -Bool Poll_CB_RTimeRemove(PollerFunction f,
- - void *clientData,
- - Bool periodic);
- -
- -
- -#ifdef _WIN32
- -void Poll_SetPumpsWindowsMessages(Bool pumps);
- -void Poll_SetWindowMessageRecipient(HWND hWnd, UINT msg, Bool alwaysThunk);
- -Bool Poll_FireWndCallback(void *lparam);
- -#endif
- -
- -#if defined(__cplusplus)
- -} // extern "C"
- -#endif
- -
- -#endif // _POLL_H_
- diff --git a/lib/include/pollImpl.h b/lib/include/pollImpl.h
- index 46442e55..8bc66997 100644
- --- a/lib/include/pollImpl.h
- +++ b/lib/include/pollImpl.h
- @@ -44,7 +44,7 @@
- #define INCLUDE_ALLOW_USERLEVEL
- #include "includeCheck.h"
-
- -#include "poll.h"
- +#include "vm_poll.h"
- #include "vm_basic_asm.h"
-
- #if defined(__cplusplus)
- diff --git a/lib/include/vm_poll.h b/lib/include/vm_poll.h
- new file mode 100644
- index 00000000..6acd4f35
- --- /dev/null
- +++ b/lib/include/vm_poll.h
- @@ -0,0 +1,330 @@
- +/*********************************************************
- + * Copyright (C) 1998-2018 VMware, Inc. All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify it
- + * under the terms of the GNU Lesser General Public License as published
- + * by the Free Software Foundation version 2.1 and no later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- + * or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public
- + * License for more details.
- + *
- + * You should have received a copy of the GNU Lesser General Public License
- + * along with this program; if not, write to the Free Software Foundation, Inc.,
- + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- + *
- + *********************************************************/
- +
- +/*********************************************************
- + * The contents of this file are subject to the terms of the Common
- + * Development and Distribution License (the "License") version 1.0
- + * and no later version. You may not use this file except in
- + * compliance with the License.
- + *
- + * You can obtain a copy of the License at
- + * http://www.opensource.org/licenses/cddl1.php
- + *
- + * See the License for the specific language governing permissions
- + * and limitations under the License.
- + *
- + *********************************************************/
- +
- +
- +#ifndef _POLL_H_
- +#define _POLL_H_
- +
- +#define INCLUDE_ALLOW_USERLEVEL
- +#define INCLUDE_ALLOW_VMCORE
- +#include "includeCheck.h"
- +
- +#include "vm_basic_types.h"
- +#include "vm_basic_defs.h"
- +#include "vmware.h"
- +#include "userlock.h"
- +
- +#if defined(__cplusplus)
- +extern "C" {
- +#endif
- +
- +#ifdef _WIN32
- +#define HZ 100
- +#elif defined linux
- +#include <asm/param.h>
- +#elif __APPLE__
- +#include <TargetConditionals.h>
- +/*
- + * Old SDKs don't define TARGET_OS_IPHONE at all.
- + * New ones define it to 0 on Mac OS X, 1 on iOS.
- + */
- +#if !defined(TARGET_OS_IPHONE) || TARGET_OS_IPHONE == 0
- +#include <sys/kernel.h>
- +#endif
- +#include <sys/poll.h>
- +#define HZ 100
- +#endif
- +#ifdef __ANDROID__
- +/*
- + * <poll.h> of android should be included, but its name is same
- + * with this file. So its content is put here to avoid conflict.
- + */
- +#include <asm/poll.h>
- +#define HZ 100
- +typedef unsigned int nfds_t;
- +int poll(struct pollfd *, nfds_t, long);
- +#endif
- +
- +
- +/*
- + * Poll event types: each type has a different reason for firing,
- + * or condition that must be met before firing.
- + */
- +
- +typedef enum {
- + /*
- + * Actual Poll queue types against which you can register callbacks.
- + */
- + POLL_VIRTUALREALTIME = -1, /* Negative because it doesn't have its own Q */
- + POLL_VTIME = 0,
- + POLL_REALTIME,
- + POLL_DEVICE,
- + POLL_MAIN_LOOP,
- + POLL_NUM_QUEUES
- +} PollEventType;
- +
- +
- +/*
- + * Classes of events
- + *
- + * These are the predefined classes. More can be declared
- + * with Poll_AllocClass().
- + */
- +
- +typedef enum PollClass {
- + POLL_CLASS_MAIN,
- + POLL_CLASS_PAUSE,
- + POLL_CLASS_IPC,
- + POLL_CLASS_CPT,
- + POLL_CLASS_MKS,
- + POLL_FIXED_CLASSES,
- + POLL_DEFAULT_FIXED_CLASSES,
- + /* Size enum to maximum */
- + POLL_MAX_CLASSES = 31,
- +} PollClass;
- +
- +/*
- + * Do not use; Special pseudo private poll class supported by
- + * PollDefault only
- + */
- +#define POLL_DEFAULT_CLASS_NET POLL_FIXED_CLASSES
- +#define POLL_DEFAULT_CS_NET PollClassSet_Singleton(POLL_DEFAULT_CLASS_NET)
- +
- +/*
- + * Each callback is registered in a set of classes
- + */
- +
- +typedef struct PollClassSet {
- + uintptr_t bits;
- +} PollClassSet;
- +
- +/* An empty PollClassSet. */
- +static INLINE PollClassSet
- +PollClassSet_Empty(void)
- +{
- + PollClassSet set = { 0 };
- + return set;
- +}
- +
- +/* A PollClassSet with the single member. */
- +static INLINE PollClassSet
- +PollClassSet_Singleton(PollClass c)
- +{
- + PollClassSet s = PollClassSet_Empty();
- +
- + ASSERT_ON_COMPILE(POLL_MAX_CLASSES < sizeof s.bits * 8);
- + ASSERT(c < POLL_MAX_CLASSES);
- +
- + s.bits = CONST3264U(1) << c;
- + return s;
- +}
- +
- +/* Combine two PollClassSets. */
- +static INLINE PollClassSet
- +PollClassSet_Union(PollClassSet lhs, PollClassSet rhs)
- +{
- + PollClassSet set;
- + set.bits = lhs.bits | rhs.bits;
- + return set;
- +}
- +
- +/* Add single class to PollClassSet. */
- +static INLINE PollClassSet
- +PollClassSet_Include(PollClassSet set, PollClass c)
- +{
- + return PollClassSet_Union(set, PollClassSet_Singleton(c));
- +}
- +
- +
- +#define POLL_CS_MAIN PollClassSet_Singleton(POLL_CLASS_MAIN)
- +#define POLL_CS_PAUSE PollClassSet_Union(POLL_CS_MAIN, \
- + PollClassSet_Singleton(POLL_CLASS_PAUSE))
- +#define POLL_CS_CPT PollClassSet_Union(POLL_CS_PAUSE, \
- + PollClassSet_Singleton(POLL_CLASS_CPT))
- +#define POLL_CS_IPC PollClassSet_Union(POLL_CS_CPT, \
- + PollClassSet_Singleton(POLL_CLASS_IPC))
- +#define POLL_CS_VMDB POLL_CS_PAUSE /* POLL_CLASS_VMDB is retired */
- +#define POLL_CS_MKS PollClassSet_Singleton(POLL_CLASS_MKS)
- +/*
- + * DANGER. You don't need POLL_CS_ALWAYS. Really. So don't use it.
- + */
- +#define POLL_CS_ALWAYS PollClassSet_Union(POLL_CS_CPT, POLL_CS_IPC)
- +
- +/*
- + * Poll class-set taxonomy:
- + * POLL_CS_MAIN
- + * - Unless you NEED another class, use POLL_CS_MAIN.
- + * POLL_CS_PAUSE
- + * - For callbacks that must occur even if the guest is paused.
- + * Most VMDB or Foundry commands are in this category.
- + * POLL_CS_CPT
- + * - Only for callbacks which can trigger intermediate Checkpoint
- + * transitions.
- + * The ONLY such callback is Migrate.
- + * POLL_CS_IPC
- + * - Only for callbacks which can contain Msg_(Post|Hint|Question)
- + * responses, and for signal handlers (why)?
- + * Vigor, VMDB, and Foundry can contain Msg_* responses.
- + * POLL_CS_MKS
- + * - Callback runs in MKS thread.
- + * POLL_CS_ALWAYS
- + * - Only for events that must be processed immediately.
- + * The ONLY such callback is OvhdMemVmxSizeCheck.
- + */
- +
- +
- +/*
- + * Poll_Callback flags
- + */
- +
- +#define POLL_FLAG_PERIODIC 0x01 // keep after firing
- +#define POLL_FLAG_REMOVE_AT_POWEROFF 0x02 // self-explanatory
- +#define POLL_FLAG_READ 0x04 // device is ready for reading
- +#define POLL_FLAG_WRITE 0x08 // device is ready for writing
- +#define POLL_FLAG_SOCKET 0x10 // device is a Windows socket
- +#define POLL_FLAG_NO_BULL 0x20 // callback does its own locking
- +#define POLL_FLAG_WINSOCK 0x40 // Winsock style write events
- +#define POLL_FLAG_FD 0x80 // device is a Windows file descriptor.
- +#define POLL_FLAG_ACCEPT_INVALID_FDS 0x100 // For broken 3rd party libs, e.g. curl
- +#define POLL_FLAG_THUNK_TO_WND 0x200 // thunk callback to window message loop
- +
- +
- +typedef void (*PollerFunction)(void *clientData);
- +typedef void (*PollerFireWrapper)(PollerFunction func,
- + void *funcData,
- + void *wrapperData);
- +typedef Bool (*PollerErrorFn)(const char *errorStr);
- +
- +/*
- + * Initialisers:
- + *
- + * For the sake of convenience, we declare the initialisers
- + * for custom implmentations here, even though the actual
- + * implementations are distinct from the core poll code.
- + */
- +
- +typedef struct PollOptions {
- + Bool locked; // Use internal MXUser for locking
- + Bool allowFullQueue; // Don't assert when device event queue is full.
- + VThreadID windowsMsgThread; // thread that processes Windows messages
- + PollerFireWrapper fireWrapperFn; // optional; may be useful for stats
- + void *fireWrapperData; // optional
- + PollerErrorFn errorFn; // optional; called upon unrecoverable error
- +} PollOptions;
- +
- +
- +void Poll_InitDefault(void);
- +void Poll_InitDefaultEx(const PollOptions *opts);
- +void Poll_InitGtk(void); // On top of glib for Linux
- +void Poll_InitCF(void); // On top of CoreFoundation for OSX
- +
- +
- +/*
- + * Functions
- + */
- +int Poll_SocketPair(Bool vmci, Bool stream, int fds[2]);
- +void Poll_Loop(Bool loop, Bool *exit, PollClass c);
- +void Poll_LoopTimeout(Bool loop, Bool *exit, PollClass c, int timeout);
- +Bool Poll_LockingEnabled(void);
- +void Poll_Exit(void);
- +
- +
- +/*
- + * Poll_Callback adds a callback regardless of whether an identical one exists.
- + * The exception to this rule is POLL_DEVICE callbacks: there is a maximum of
- + * one read and one write callback per fd.
- + *
- + * Poll_CallbackRemove removes one callback. If there are multiple identical
- + * callbacks, which one is removed is an implementation detail. Note that in
- + * the case of POLL_DEVICE and POLL_REALTIME callbacks, the fd/delay used to
- + * create the callback is not specified when removing, so all callbacks
- + * of those types with the same flags, function, and clientData are considered
- + * "identical" even if their fd/delay differed.
- + */
- +
- +VMwareStatus Poll_Callback(PollClassSet classSet,
- + int flags,
- + PollerFunction f,
- + void *clientData,
- + PollEventType type,
- + PollDevHandle info, // fd/microsec delay
- + MXUserRecLock *lck);
- +Bool Poll_CallbackRemove(PollClassSet classSet,
- + int flags,
- + PollerFunction f,
- + void *clientData,
- + PollEventType type);
- +Bool Poll_CallbackRemoveOneByCB(PollClassSet classSet,
- + int flags,
- + PollerFunction f,
- + PollEventType type,
- + void **clientData);
- +
- +void Poll_NotifyChange(PollClassSet classSet);
- +
- +/*
- + * Wrappers for Poll_Callback and Poll_CallbackRemove that present
- + * simpler subsets of those interfaces.
- + */
- +
- +VMwareStatus Poll_CB_Device(PollerFunction f,
- + void *clientData,
- + PollDevHandle device,
- + Bool periodic);
- +
- +Bool Poll_CB_DeviceRemove(PollerFunction f,
- + void *clientData,
- + Bool periodic);
- +
- +
- +VMwareStatus Poll_CB_RTime(PollerFunction f,
- + void *clientData,
- + int64 delay, // microseconds
- + Bool periodic,
- + MXUserRecLock *lock);
- +
- +Bool Poll_CB_RTimeRemove(PollerFunction f,
- + void *clientData,
- + Bool periodic);
- +
- +
- +#ifdef _WIN32
- +void Poll_SetPumpsWindowsMessages(Bool pumps);
- +void Poll_SetWindowMessageRecipient(HWND hWnd, UINT msg, Bool alwaysThunk);
- +Bool Poll_FireWndCallback(void *lparam);
- +#endif
- +
- +#if defined(__cplusplus)
- +} // extern "C"
- +#endif
- +
- +#endif // _POLL_H_
- diff --git a/lib/rpcIn/rpcin.c b/lib/rpcIn/rpcin.c
- index 47a3380e..660382c6 100644
- --- a/lib/rpcIn/rpcin.c
- +++ b/lib/rpcIn/rpcin.c
- @@ -57,7 +57,7 @@
-
- #if defined(VMTOOLS_USE_VSOCKET)
- # include <glib.h>
- -# include "poll.h"
- +# include "vm_poll.h"
- # include "asyncsocket.h"
- # include "vmci_defs.h"
- #include "dataMap.h"
- --
- 2.23.0
|