Skip to content

Commit f3cbc8d

Browse files
committed
Name asm context pointer
1 parent 0480661 commit f3cbc8d

File tree

2 files changed

+16
-15
lines changed

2 files changed

+16
-15
lines changed

Zend/zend_fibers.c

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,13 @@ static zend_object_handlers zend_fiber_handlers;
6666

6767
static zend_function zend_fiber_function = { ZEND_INTERNAL_FUNCTION };
6868

69-
typedef void *fcontext_t;
69+
typedef struct _zend_fiber_transfer {
70+
zend_fiber_asm_handle handle;
71+
zend_fiber_context *previous;
72+
} zend_fiber_transfer;
7073

71-
typedef struct _transfer_t {
72-
fcontext_t context;
73-
void *data;
74-
} transfer_t;
75-
76-
extern fcontext_t make_fcontext(void *sp, size_t size, void (*fn)(transfer_t));
77-
extern transfer_t jump_fcontext(fcontext_t to, void *vp);
74+
extern zend_fiber_asm_handle make_fcontext(void *sp, size_t size, void (*fn)(zend_fiber_transfer));
75+
extern zend_fiber_transfer jump_fcontext(zend_fiber_asm_handle to, zend_fiber_context *previous);
7876

7977
#define ZEND_FIBER_DEFAULT_PAGE_SIZE 4096
8078

@@ -181,12 +179,12 @@ static void zend_fiber_stack_free(zend_fiber_stack *stack)
181179
stack->pointer = NULL;
182180
}
183181

184-
static ZEND_NORETURN void zend_fiber_trampoline(transfer_t transfer)
182+
static ZEND_NORETURN void zend_fiber_trampoline(zend_fiber_transfer transfer)
185183
{
186184
zend_fiber_context *context = EG(current_fiber);
187-
zend_fiber_context *from = transfer.data;
185+
zend_fiber_context *from = transfer.previous;
188186

189-
from->handle = transfer.context;
187+
from->handle = transfer.handle;
190188

191189
#ifdef __SANITIZE_ADDRESS__
192190
__sanitizer_finish_switch_fiber(NULL, &from->stack.prior_pointer, &from->stack.prior_size);
@@ -261,16 +259,16 @@ ZEND_API zend_fiber_context *zend_fiber_switch_context(zend_fiber_context *to)
261259
to->stack.prior_size);
262260
#endif
263261

264-
transfer_t transfer = jump_fcontext(to->handle, from);
262+
zend_fiber_transfer transfer = jump_fcontext(to->handle, from);
265263

266264
#ifdef __SANITIZE_ADDRESS__
267265
__sanitizer_finish_switch_fiber(fake_stack, &to->stack.prior_pointer, &to->stack.prior_size);
268266
#endif
269267

270268
EG(current_fiber) = from;
271269

272-
zend_fiber_context *previous = transfer.data;
273-
previous->handle = transfer.context;
270+
zend_fiber_context *previous = transfer.previous;
271+
previous->handle = transfer.handle;
274272

275273
zend_fiber_restore_vm_state(&state);
276274

Zend/zend_fibers.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,12 @@ typedef struct _zend_fiber_context zend_fiber_context;
7070
/* Coroutine functions must return a fiber context to switch to after they are finished. */
7171
typedef zend_fiber_context *(*zend_fiber_coroutine)(zend_fiber_context *context);
7272

73+
/* Context handle used for asm context jumps. */
74+
typedef void *zend_fiber_asm_handle;
75+
7376
/* Defined as a macro to allow anonymous embedding. */
7477
#define ZEND_FIBER_CONTEXT_FIELDS \
75-
void *handle; \
78+
zend_fiber_asm_handle handle; \
7679
zend_fiber_context *caller; \
7780
zend_fiber_coroutine function; \
7881
zend_fiber_stack stack; \

0 commit comments

Comments
 (0)