You've already forked qlg.tsgz.moe
addons
app_download_files
extend
hyhproject
mobile
oss
static
thinkphp
upload
vendor
5ini99
composer
oss-sdk
swoole
.github
benchmark
examples
include
src
tests
thirdparty
tools
travis
.gitignore
.gitmodules
.travis.yml
CMakeLists.txt
CREDITS
LICENSE
README.md
Version2.md
build.sh
clear.sh
config.m4
make.sh
package.xml
php7_wrapper.h
php_swoole.h
swoole.c
swoole_async.c
swoole_atomic.c
swoole_buffer.c
swoole_channel.c
swoole_channel_coro.cc
swoole_client.c
swoole_client_coro.c
swoole_config.h
swoole_coroutine.cc
swoole_coroutine.h
swoole_coroutine_util.c
swoole_event.c
swoole_http.h
swoole_http_client.c
swoole_http_client.h
swoole_http_client_coro.c
swoole_http_server.c
swoole_http_v2_client.c
swoole_http_v2_client.h
swoole_http_v2_client_coro.c
swoole_http_v2_server.c
swoole_lock.c
swoole_memory_pool.c
swoole_mmap.c
swoole_msgqueue.c
swoole_mysql.c
swoole_mysql.h
swoole_mysql_coro.c
swoole_postgresql_coro.c
swoole_postgresql_coro.h
swoole_process.c
swoole_process_pool.c
swoole_redis.c
swoole_redis_coro.c
swoole_redis_server.c
swoole_ringqueue.c
swoole_runtime.cc
swoole_serialize.c
swoole_serialize.h
swoole_server.c
swoole_server_port.c
swoole_socket_coro.c
swoole_table.c
swoole_timer.c
swoole_trace.c
swoole_websocket_server.c
wechat
.htaccess
autoload.php
wxtmp
.gitignore
.htaccess
.user.ini
404.html
H5B854518.wgt
admin.php
app-release.apk
app_download.html
cash.lock
demo.php
get_startup.php
get_version.php
get_version_new.php
hyhproject.tar.gz
index.html
index.php
reg.lock
robots.txt
128 lines
3.4 KiB
C
Executable File
128 lines
3.4 KiB
C
Executable File
#ifndef SWOOLE_CORO_INCLUDE_C_H_
|
|
#define SWOOLE_CORO_INCLUDE_C_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
#include "coroutine.h"
|
|
|
|
#define SW_EX_CV_NUM(ex, n) (((zval ***)(((char *)(ex)) + ZEND_MM_ALIGNED_SIZE(sizeof(zend_execute_data)))) + n)
|
|
#define SW_EX_CV(var) (*SW_EX_CV_NUM(execute_data, var))
|
|
|
|
typedef enum
|
|
{
|
|
SW_CORO_CONTEXT_RUNNING, SW_CORO_CONTEXT_IN_DELAYED_TIMEOUT_LIST, SW_CORO_CONTEXT_TERM
|
|
} php_context_state;
|
|
|
|
typedef struct _php_args
|
|
{
|
|
zend_fcall_info_cache *fci_cache;
|
|
zval **argv;
|
|
int argc;
|
|
zval *retval;
|
|
void *post_callback;
|
|
void *params;
|
|
} php_args;
|
|
|
|
typedef struct _coro_task
|
|
{
|
|
int cid;
|
|
sw_coro_state state;
|
|
zend_execute_data *execute_data;
|
|
zend_vm_stack stack;
|
|
zval *vm_stack_top;
|
|
zval *vm_stack_end;
|
|
|
|
zend_vm_stack origin_stack;
|
|
zval *origin_vm_stack_top;
|
|
zval *origin_vm_stack_end;
|
|
|
|
zend_execute_data *yield_execute_data;
|
|
zend_vm_stack yield_stack;
|
|
zval *yield_vm_stack_top;
|
|
zval *yield_vm_stack_end;
|
|
zend_bool is_yield;
|
|
/**
|
|
* user coroutine
|
|
*/
|
|
coroutine_t *co;
|
|
zval *function;
|
|
time_t start_time;
|
|
void (*post_callback)(void *param);
|
|
void *post_callback_params;
|
|
php_args args;
|
|
} coro_task;
|
|
|
|
typedef struct _php_context
|
|
{
|
|
zval **current_coro_return_value_ptr_ptr;
|
|
zval *current_coro_return_value_ptr;
|
|
zval coro_params;
|
|
void (*onTimeout)(struct _php_context *cxt);
|
|
void *private_data;
|
|
zval **current_eg_return_value_ptr_ptr;
|
|
zend_execute_data *current_execute_data;
|
|
zval *current_vm_stack_top;
|
|
zval *current_vm_stack_end;
|
|
zval *allocated_return_value_ptr;
|
|
coro_task *current_task;
|
|
zend_vm_stack current_vm_stack;
|
|
php_context_state state;
|
|
} php_context;
|
|
|
|
typedef struct _coro_global
|
|
{
|
|
uint32_t coro_num;
|
|
uint32_t max_coro_num;
|
|
uint32_t stack_size;
|
|
zend_vm_stack origin_vm_stack;
|
|
zval *origin_vm_stack_top;
|
|
zval *origin_vm_stack_end;
|
|
zval *allocated_return_value_ptr;
|
|
zend_execute_data *origin_ex;
|
|
coro_task *current_coro;
|
|
zend_bool active;
|
|
coro_task *call_stack[128];
|
|
int call_stack_size;
|
|
swPipe *chan_pipe;
|
|
int error;
|
|
} coro_global;
|
|
|
|
typedef struct _swTimer_coro_callback
|
|
{
|
|
int ms;
|
|
int cli_fd;
|
|
long *timeout_id;
|
|
void* data;
|
|
} swTimer_coro_callback;
|
|
|
|
extern coro_global COROG;
|
|
|
|
int sw_get_current_cid();
|
|
int coro_init(TSRMLS_D);
|
|
void coro_destroy(TSRMLS_D);
|
|
void coro_check(TSRMLS_D);
|
|
void coro_handle_timeout();
|
|
|
|
#define coro_create(op_array, argv, argc, retval, post_callback, param) \
|
|
sw_coro_create(op_array, argv, argc, *retval, post_callback, param)
|
|
#define coro_save(sw_php_context) \
|
|
sw_coro_save(return_value, sw_php_context);
|
|
#define coro_resume(sw_current_context, retval, coro_retval) \
|
|
sw_coro_resume(sw_current_context, retval, *coro_retval)
|
|
#define coro_yield() sw_coro_yield()
|
|
|
|
int sw_coro_create(zend_fcall_info_cache *op_array, zval **argv, int argc, zval *retval, void *post_callback, void *param);
|
|
void sw_coro_yield();
|
|
void sw_coro_close();
|
|
int sw_coro_resume(php_context *sw_current_context, zval *retval, zval *coro_retval);
|
|
void sw_coro_save(zval *return_value, php_context *sw_php_context);
|
|
|
|
int php_swoole_add_timer_coro(int ms, int cli_fd, long *timeout_id, void* param, swLinkedList_node **node TSRMLS_DC);
|
|
int php_swoole_clear_timer_coro(long id TSRMLS_DC);
|
|
|
|
#ifdef __cplusplus
|
|
} /* end extern "C" */
|
|
#endif
|
|
#endif /* SWOOLE_CORO_INCLUDE_C_H_ */
|