Skip to content

Commit 518b411

Browse files
committed
php#13: Future methods
1 parent 94227f5 commit 518b411

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

Zend/zend_async_API.h

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,10 +1077,39 @@ struct _zend_future_s {
10771077
zend_async_event_t event; /* Event inheritance (first member) */
10781078
zval result; /* Result value */
10791079
zend_object *exception; /* Exception object (NULL = no error) */
1080+
/* Created file and line number */
1081+
uint32_t lineno;
1082+
uint32_t completed_lineno;
1083+
/* Completed file and line number */
1084+
zend_string *filename;
1085+
zend_string *completed_filename;
10801086
};
10811087

10821088
#define ZEND_FUTURE_F_THREAD_SAFE (1u << 10)
1083-
#define ZEND_FUTURE_F_IGNORE (1u << 11)
1089+
#define ZEND_FUTURE_F_IGNORED (1u << 11)
1090+
1091+
#define ZEND_FUTURE_IS_COMPLETED(future) (((future)->event.flags & ZEND_ASYNC_EVENT_F_CLOSED) != 0)
1092+
1093+
#define ZEND_FUTURE_SET_THREAD_SAFE(future) ((future)->event.flags |= ZEND_FUTURE_F_THREAD_SAFE)
1094+
#define ZEND_FUTURE_SET_IGNORED(future) ((future)->event.flags |= ZEND_FUTURE_F_IGNORED)
1095+
1096+
1097+
#define ZEND_FUTURE_COMPLETE(future, result) do { \
1098+
if(ZEND_ASYNC_EVENT_IS_CLOSED(&(future)->event)) { \
1099+
break; \
1100+
} \
1101+
ZVAL_COPY(&(future)->result, (result)); \
1102+
(future)->event.stop(&(future)->event); \
1103+
} while (0)
1104+
1105+
#define ZEND_FUTURE_REJECT(future, error) do { \
1106+
if(ZEND_ASYNC_EVENT_IS_CLOSED(&(future)->event)) { \
1107+
break; \
1108+
} \
1109+
(future)->exception = error; \
1110+
GC_ADDREF(error); \
1111+
(future)->event.stop(&(future)->event); \
1112+
} while (0)
10841113

10851114
///////////////////////////////////////////////////////////////
10861115
/// Channel
@@ -1092,7 +1121,6 @@ struct _zend_future_s {
10921121
*/
10931122
struct _zend_async_channel_s {
10941123
zend_async_event_t event; /* Event inheritance (first member) */
1095-
10961124
/* Channel-specific method pointers */
10971125
zend_channel_send_t send; /* Send method */
10981126
zend_channel_receive_t receive; /* Receive method */

0 commit comments

Comments
 (0)