GRPC Core  0.10.0.0
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
pollset_kick_posix.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015, Google Inc.
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are
8  * met:
9  *
10  * * Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  * * Redistributions in binary form must reproduce the above
13  * copyright notice, this list of conditions and the following disclaimer
14  * in the documentation and/or other materials provided with the
15  * distribution.
16  * * Neither the name of Google Inc. nor the names of its
17  * contributors may be used to endorse or promote products derived from
18  * this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  *
32  */
33 
34 #ifndef GRPC_INTERNAL_CORE_IOMGR_POLLSET_KICK_POSIX_H
35 #define GRPC_INTERNAL_CORE_IOMGR_POLLSET_KICK_POSIX_H
36 
38 #include <grpc/support/sync.h>
39 
40 /* pollset kicking allows breaking a thread out of polling work for
41  a given pollset.
42  writing a byte to a pipe is used as a posix-ly portable base
43  mechanism, and eventfds are utilized on Linux for better performance. */
44 
45 typedef struct grpc_kick_fd_info {
47  /* used for polling list and free list */
49  /* only used when polling */
52 
53 typedef struct grpc_pollset_kick_state {
55  int kicked;
58 
59 #define GRPC_POLLSET_KICK_GET_FD(kick_fd_info) \
60  GRPC_WAKEUP_FD_GET_READ_FD(&(kick_fd_info)->wakeup_fd)
61 
62 /* This is an abstraction around the typical pipe mechanism for waking up a
63  thread sitting in a poll() style call. */
64 
67 
70 
71 /* Guarantees a pure posix implementation rather than a specialized one, if
72  * applicable. Intended for testing. */
74 
75 /* Must be called before entering poll(). If return value is NULL, this consumed
76  an existing kick. Otherwise the return value is an FD to add to the poll set.
77  */
79  grpc_pollset_kick_state *kick_state);
80 
81 /* Consume an existing kick. Must be called after poll returns that the fd was
82  readable, and before calling kick_post_poll. */
84  grpc_kick_fd_info *fd_info);
85 
86 /* Must be called after pre_poll, and after consume if applicable */
88  grpc_kick_fd_info *fd_info);
89 
90 /* Actually kick */
92 
93 #endif /* GRPC_INTERNAL_CORE_IOMGR_POLLSET_KICK_POSIX_H */
gpr_mu mu
Definition: pollset_kick_posix.h:54
Definition: wakeup_fd_posix.h:83
void grpc_pollset_kick_post_poll(grpc_pollset_kick_state *kick_state, grpc_kick_fd_info *fd_info)
struct grpc_pollset_kick_state grpc_pollset_kick_state
grpc_wakeup_fd_info wakeup_fd
Definition: pollset_kick_posix.h:46
struct grpc_kick_fd_info fd_list
Definition: pollset_kick_posix.h:56
void grpc_pollset_kick_global_init(void)
void grpc_pollset_kick_init(grpc_pollset_kick_state *kick_state)
void grpc_pollset_kick_global_destroy(void)
Definition: sync_win32.h:39
void grpc_pollset_kick_kick(grpc_pollset_kick_state *kick_state)
void grpc_pollset_kick_consume(grpc_pollset_kick_state *kick_state, grpc_kick_fd_info *fd_info)
grpc_kick_fd_info * grpc_pollset_kick_pre_poll(grpc_pollset_kick_state *kick_state)
int kicked
Definition: pollset_kick_posix.h:55
struct grpc_kick_fd_info grpc_kick_fd_info
Definition: pollset_kick_posix.h:53
struct grpc_kick_fd_info * next
Definition: pollset_kick_posix.h:48
void grpc_pollset_kick_destroy(grpc_pollset_kick_state *kick_state)
struct grpc_kick_fd_info * prev
Definition: pollset_kick_posix.h:50
void grpc_pollset_kick_global_init_fallback_fd(void)
Definition: pollset_kick_posix.h:45