@@ -173,20 +173,28 @@ typedef void (*zend_async_reactor_shutdown_t)(void);
173173typedef bool (* zend_async_reactor_execute_t )(bool no_wait );
174174typedef 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+ );
177179typedef 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 );
188196typedef 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
192200typedef 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
203211typedef int (* zend_async_exec_t ) (
@@ -267,6 +275,8 @@ typedef struct _zend_async_callbacks_vector_s {
267275struct _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