Skip to content

Commit 4cff86f

Browse files
committed
% Refactoring the extension mechanism for Event-type objects.
1 parent f4597e1 commit 4cff86f

File tree

1 file changed

+35
-22
lines changed

1 file changed

+35
-22
lines changed

Zend/zend_async_API.h

Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -173,20 +173,28 @@ typedef void (*zend_async_reactor_shutdown_t)(void);
173173
typedef bool (*zend_async_reactor_execute_t)(bool no_wait);
174174
typedef bool (*zend_async_reactor_loop_alive_t)(void);
175175

176-
typedef zend_async_poll_event_t* (*zend_async_new_socket_event_t)(zend_socket_t socket, async_poll_event events, size_t size);
176+
typedef zend_async_poll_event_t* (*zend_async_new_socket_event_t)(
177+
zend_socket_t socket, async_poll_event events, size_t extra_size
178+
);
177179
typedef zend_async_poll_event_t* (*zend_async_new_poll_event_t)(
178-
zend_file_descriptor_t fh, zend_socket_t socket, async_poll_event events, size_t size
180+
zend_file_descriptor_t fh, zend_socket_t socket, async_poll_event events, size_t extra_size
181+
);
182+
typedef zend_async_timer_event_t* (*zend_async_new_timer_event_t)(
183+
const zend_ulong timeout, const bool is_periodic, size_t extra_size
184+
);
185+
typedef zend_async_signal_event_t* (*zend_async_new_signal_event_t)(int signum, size_t extra_size);
186+
typedef zend_async_process_event_t* (*zend_async_new_process_event_t)(zend_process_t process_handle, size_t extra_size);
187+
typedef void (*zend_async_thread_entry_t)(void *arg, size_t extra_size);
188+
typedef zend_async_thread_event_t* (*zend_async_new_thread_event_t)(
189+
zend_async_thread_entry_t entry, void *arg, size_t extra_size
179190
);
180-
typedef zend_async_timer_event_t* (*zend_async_new_timer_event_t)(const zend_ulong timeout, const bool is_periodic, size_t size);
181-
typedef zend_async_signal_event_t* (*zend_async_new_signal_event_t)(int signum, size_t size);
182-
typedef zend_async_process_event_t* (*zend_async_new_process_event_t)(zend_process_t process_handle, size_t size);
183-
typedef void (*zend_async_thread_entry_t)(void *arg, size_t size);
184-
typedef zend_async_thread_event_t* (*zend_async_new_thread_event_t)(zend_async_thread_entry_t entry, void *arg, size_t size);
185-
typedef zend_async_filesystem_event_t* (*zend_async_new_filesystem_event_t)(zend_string * path, const unsigned int flags, size_t size);
186-
187-
typedef zend_async_dns_nameinfo_t* (*zend_async_getnameinfo_t)(const struct sockaddr* addr, int flags, size_t size);
191+
typedef zend_async_filesystem_event_t* (*zend_async_new_filesystem_event_t)(
192+
zend_string * path, const unsigned int flags, size_t extra_size
193+
);
194+
195+
typedef zend_async_dns_nameinfo_t* (*zend_async_getnameinfo_t)(const struct sockaddr* addr, int flags, size_t extra_size);
188196
typedef zend_async_dns_addrinfo_t* (*zend_async_getaddrinfo_t)(
189-
const char *node, const char *service, const struct addrinfo *hints, size_t size
197+
const char *node, const char *service, const struct addrinfo *hints, size_t extra_size
190198
);
191199

192200
typedef zend_async_exec_event_t* (*zend_async_new_exec_event_t) (
@@ -197,7 +205,7 @@ typedef zend_async_exec_event_t* (*zend_async_new_exec_event_t) (
197205
zval *std_error,
198206
const char *cwd,
199207
const char *env,
200-
size_t size
208+
size_t extra_size
201209
);
202210

203211
typedef int (* zend_async_exec_t) (
@@ -267,6 +275,8 @@ typedef struct _zend_async_callbacks_vector_s {
267275
struct _zend_async_event_s {
268276
/* If event is closed, it cannot be started or stopped. */
269277
uint32_t flags;
278+
/* Offset to the beginning of additional data associated with the event (used for extensions) */
279+
uint32_t extra_offset;
270280
union
271281
{
272282
/* The refcount of the event. */
@@ -276,6 +286,7 @@ struct _zend_async_event_s {
276286
};
277287
/* The Event loop reference count. */
278288
uint32_t loop_ref_count;
289+
/* Events callbacks */
279290
zend_async_callbacks_vector_t callbacks;
280291
/* Methods */
281292
zend_async_event_add_callback_t add_callback;
@@ -1018,27 +1029,29 @@ END_EXTERN_C()
10181029
#define ZEND_ASYNC_REACTOR_LOOP_ALIVE() zend_async_reactor_loop_alive_fn()
10191030

10201031
#define ZEND_ASYNC_NEW_SOCKET_EVENT(socket, events) zend_async_new_socket_event_fn(socket, events, 0)
1021-
#define ZEND_ASYNC_NEW_SOCKET_EVENT_EX(socket, events, size) zend_async_new_socket_event_fn(socket, events, size)
1032+
#define ZEND_ASYNC_NEW_SOCKET_EVENT_EX(socket, events, extra_size) zend_async_new_socket_event_fn(socket, events, extra_size)
10221033
#define ZEND_ASYNC_NEW_POLL_EVENT(fh, socket, events) zend_async_new_poll_event_fn(fh, socket, events, 0)
1023-
#define ZEND_ASYNC_NEW_POLL_EVENT_EX(fh, socket, events, size) zend_async_new_poll_event_fn(fh, socket, events, size)
1034+
#define ZEND_ASYNC_NEW_POLL_EVENT_EX(fh, socket, events, extra_size) zend_async_new_poll_event_fn(fh, socket, events, extra_size)
10241035
#define ZEND_ASYNC_NEW_TIMER_EVENT(timeout, is_periodic) zend_async_new_timer_event_fn(timeout, is_periodic, 0)
1025-
#define ZEND_ASYNC_NEW_TIMER_EVENT_EX(timeout, is_periodic, size) zend_async_new_timer_event_fn(timeout, is_periodic, size)
1036+
#define ZEND_ASYNC_NEW_TIMER_EVENT_EX(timeout, is_periodic, extra_size) zend_async_new_timer_event_fn(timeout, is_periodic, extra_size)
10261037
#define ZEND_ASYNC_NEW_SIGNAL_EVENT(signum) zend_async_new_signal_event_fn(signum, 0)
1027-
#define ZEND_ASYNC_NEW_SIGNAL_EVENT_EX(signum, size) zend_async_new_signal_event_fn(signum, size)
1028-
#define ZEND_ASYNC_NEW_PROCESS_EVENT() zend_async_new_process_event_fn()
1029-
#define ZEND_ASYNC_NEW_PROCESS_EVENT_EX() zend_async_new_process_event_fn()
1030-
#define ZEND_ASYNC_NEW_THREAD_EVENT() zend_async_new_thread_event_fn()
1038+
#define ZEND_ASYNC_NEW_SIGNAL_EVENT_EX(signum, extra_size) zend_async_new_signal_event_fn(signum, extra_size)
1039+
#define ZEND_ASYNC_NEW_PROCESS_EVENT(process_handle) zend_async_new_process_event_fn(process_handle, 0)
1040+
#define ZEND_ASYNC_NEW_PROCESS_EVENT_EX(process_handle, extra_size) zend_async_new_process_event_fn(process_handle, extra_size)
1041+
#define ZEND_ASYNC_NEW_THREAD_EVENT(entry, arg) zend_async_new_thread_event_fn(entry, arg, 0)
10311042
#define ZEND_ASYNC_NEW_THREAD_EVENT_EX(entry, arg) zend_async_new_thread_event_fn(entry, arg, 0)
10321043
#define ZEND_ASYNC_NEW_FILESYSTEM_EVENT(path, flags) zend_async_new_filesystem_event_fn(path, flags, 0)
1033-
#define ZEND_ASYNC_NEW_FILESYSTEM_EVENT_EX(path, flags, size) zend_async_new_filesystem_event_fn(path, flags, size)
1044+
#define ZEND_ASYNC_NEW_FILESYSTEM_EVENT_EX(path, flags, extra_size) zend_async_new_filesystem_event_fn(path, flags, extra_size)
10341045

10351046
#define ZEND_ASYNC_GETNAMEINFO(addr, flags) zend_async_getnameinfo_fn(addr, flags, 0)
1036-
#define ZEND_ASYNC_GETNAMEINFO_EX(addr, flags, size) zend_async_getnameinfo_fn(addr, flags, size)
1047+
#define ZEND_ASYNC_GETNAMEINFO_EX(addr, flags, extra_size) zend_async_getnameinfo_fn(addr, flags, extra_size)
10371048
#define ZEND_ASYNC_GETADDRINFO(node, service, hints, flags) zend_async_getaddrinfo_fn(node, service, hints, flags, 0)
1038-
#define ZEND_ASYNC_GETADDRINFO_EX(node, service, hints, flags, size) zend_async_getaddrinfo_fn(node, service, hints, flags, size)
1049+
#define ZEND_ASYNC_GETADDRINFO_EX(node, service, hints, flags, extra_size) zend_async_getaddrinfo_fn(node, service, hints, flags, extra_size)
10391050

10401051
#define ZEND_ASYNC_NEW_EXEC_EVENT(exec_mode, cmd, return_buffer, return_value, std_error, cwd, env) \
10411052
zend_async_new_exec_event_fn(exec_mode, cmd, return_buffer, return_value, std_error, cwd, env, 0)
1053+
#define ZEND_ASYNC_NEW_EXEC_EVENT_EX(exec_mode, cmd, return_buffer, return_value, std_error, cwd, env, extra_size) \
1054+
zend_async_new_exec_event_fn(exec_mode, cmd, return_buffer, return_value, std_error, cwd, env, extra_size)
10421055
#define ZEND_ASYNC_EXEC(exec_mode, cmd, return_buffer, return_value, std_error, cwd, env, timeout) \
10431056
zend_async_exec_fn(exec_mode, cmd, return_buffer, return_value, std_error, cwd, env, timeout)
10441057

0 commit comments

Comments
 (0)