mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 15:43:01 +00:00 
			
		
		
		
	Remove some extra fiber state and use a flag.
This commit is contained in:
		| @@ -258,7 +258,7 @@ void janet_async_end(JanetFiber *fiber) { | ||||
|         janet_gcunroot(janet_wrap_abstract(fiber->ev_stream)); | ||||
|         fiber->ev_callback = NULL; | ||||
|         if (fiber->ev_state) { | ||||
|             if (!fiber->ev_in_flight) { | ||||
|             if (!(fiber->flags & JANET_FIBER_EV_FLAG_IN_FLIGHT)) { | ||||
|                 janet_free(fiber->ev_state); | ||||
|                 janet_ev_dec_refcount(); | ||||
|             } | ||||
| @@ -1483,7 +1483,7 @@ void janet_loop1_impl(int has_timeout, JanetTimestamp to) { | ||||
|                 fiber = stream->write_fiber; | ||||
|             } | ||||
|             if (fiber != NULL) { | ||||
|                 fiber->ev_in_flight = 0; | ||||
|                 fiber->flags &= ~JANET_FIBER_EV_FLAG_IN_FLIGHT; | ||||
|                 /* System is done with this, we can reused this data */ | ||||
|                 overlapped->InternalHigh = (ULONG_PTR) num_bytes_transfered; | ||||
|                 fiber->ev_callback(fiber, result ? JANET_ASYNC_EVENT_COMPLETE : JANET_ASYNC_EVENT_FAILED); | ||||
| @@ -2232,7 +2232,7 @@ void ev_callback_read(JanetFiber *fiber, JanetAsyncEvent event) { | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|             fiber->ev_in_flight = 1; | ||||
|             fiber->flags |= JANET_FIBER_EV_FLAG_IN_FLIGHT; | ||||
|         } | ||||
|         break; | ||||
| #else | ||||
| @@ -2456,7 +2456,7 @@ void ev_callback_write(JanetFiber *fiber, JanetAsyncEvent event) { | ||||
|                 status = WSASendTo(sock, &state->wbuf, 1, NULL, state->flags, to, tolen, &state->overlapped, NULL); | ||||
|                 if (status) { | ||||
|                     if (WSA_IO_PENDING == WSAGetLastError()) { | ||||
|                         fiber->ev_in_flight = 1; | ||||
|                         fiber->flags |= JANET_FIBER_EV_FLAG_IN_FLIGHT; | ||||
|                     } else { | ||||
|                         janet_cancel(fiber, janet_ev_lasterr()); | ||||
|                         janet_async_end(fiber); | ||||
| @@ -2481,7 +2481,7 @@ void ev_callback_write(JanetFiber *fiber, JanetAsyncEvent event) { | ||||
|                 status = WriteFile(stream->handle, bytes, len, NULL, &state->overlapped); | ||||
|                 if (!status) { | ||||
|                     if (ERROR_IO_PENDING == GetLastError()) { | ||||
|                         fiber->ev_in_flight = 1; | ||||
|                         fiber->flags |= JANET_FIBER_EV_FLAG_IN_FLIGHT; | ||||
|                     } else { | ||||
|                         janet_cancel(fiber, janet_ev_lasterr()); | ||||
|                         janet_async_end(fiber); | ||||
|   | ||||
| @@ -44,7 +44,6 @@ static void fiber_reset(JanetFiber *fiber) { | ||||
|     fiber->ev_state = NULL; | ||||
|     fiber->ev_stream = NULL; | ||||
|     fiber->supervisor_channel = NULL; | ||||
|     fiber->ev_in_flight = 0; | ||||
| #endif | ||||
|     janet_fiber_set_status(fiber, JANET_STATUS_NEW); | ||||
| } | ||||
|   | ||||
| @@ -59,6 +59,9 @@ | ||||
| #define JANET_FIBER_EV_FLAG_CANCELED 0x10000 | ||||
| #define JANET_FIBER_EV_FLAG_SUSPENDED 0x20000 | ||||
| #define JANET_FIBER_FLAG_ROOT 0x40000 | ||||
| #define JANET_FIBER_EV_FLAG_IN_FLIGHT 0x1 | ||||
|  | ||||
| /* used only on windows, should otherwise be unset */ | ||||
|  | ||||
| #define janet_fiber_set_status(f, s) do {\ | ||||
|     (f)->flags &= ~JANET_FIBER_STATUS_MASK;\ | ||||
|   | ||||
| @@ -330,7 +330,7 @@ static void janet_deinit_block(JanetGCObject *mem) { | ||||
|             { | ||||
|                 JanetFiber *f = (JanetFiber *)mem; | ||||
| #ifdef JANET_EV | ||||
|                 if (f->ev_state && !f->ev_in_flight) { | ||||
|                 if (f->ev_state && !(f->flags & JANET_FIBER_EV_FLAG_IN_FLIGHT)) { | ||||
|                     janet_ev_dec_refcount(); | ||||
|                     janet_free(f->ev_state); | ||||
|                 } | ||||
|   | ||||
| @@ -1053,7 +1053,6 @@ static const uint8_t *unmarshal_one_fiber( | ||||
|     fiber->ev_state = NULL; | ||||
|     fiber->ev_callback = NULL; | ||||
|     fiber->ev_stream = NULL; | ||||
|     fiber->ev_in_flight = 0; | ||||
| #endif | ||||
|  | ||||
|     /* Push fiber to seen stack */ | ||||
|   | ||||
| @@ -24,6 +24,7 @@ | ||||
| #include "features.h" | ||||
| #include <janet.h> | ||||
| #include "util.h" | ||||
| #include "fiber.h" | ||||
| #endif | ||||
|  | ||||
| #ifdef JANET_NET | ||||
| @@ -252,7 +253,7 @@ static int net_sched_accept_impl(NetStateAccept *state, JanetFiber *fiber, Janet | ||||
|         int code = WSAGetLastError(); | ||||
|         if (code == WSA_IO_PENDING) { | ||||
|             /* indicates io is happening async */ | ||||
|             fiber->ev_in_flight = 1; | ||||
|             fiber->flags |= JANET_FIBER_EV_FLAG_IN_FLIGHT; | ||||
|             return 0; | ||||
|         } | ||||
|         *err = janet_ev_lasterr(); | ||||
|   | ||||
| @@ -927,7 +927,6 @@ struct JanetFiber { | ||||
|     JanetStream *ev_stream; /* which stream we are waiting on */ | ||||
|     void *ev_state; /* Extra data for ev callback state. On windows, first element must be OVERLAPPED. */ | ||||
|     void *supervisor_channel; /* Channel to push self to when complete */ | ||||
|     int ev_in_flight; /* If overlapped operation is in flight */ | ||||
| #endif | ||||
| }; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose