Update to latest DN library
This commit is contained in:
@@ -53,7 +53,7 @@ DN_API void DN_ASYNC_Init(DN_ASYNCCore *async, char *base, DN_USize base_size, D
|
||||
async->threads = threads;
|
||||
for (DN_ForIndexU(index, async->thread_count)) {
|
||||
DN_OSThread *thread = async->threads + index;
|
||||
DN_OS_ThreadInit(thread, DN_ASYNC_ThreadEntryPoint_, nullptr, async);
|
||||
DN_OS_ThreadInit(thread, DN_ASYNC_ThreadEntryPoint_, /*lane=*/ nullptr, DN_TCInitArgsDefault(), async);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -201,6 +201,6 @@ DN_API void DN_BinPackCBuffer(DN_BinPack *pack, DN_BinPackMode mode, char *ptr,
|
||||
|
||||
DN_API DN_Str8 DN_BinPackBuild(DN_BinPack const *pack, DN_Arena *arena)
|
||||
{
|
||||
DN_Str8 result = DN_Str8FromStr8BuilderArena(&pack->writer, arena);
|
||||
DN_Str8 result = DN_Str8BuilderBuild(&pack->writer, arena);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -127,6 +127,4 @@ void DN_NET_EndFinishedRequest(DN_NETRequest *request)
|
||||
{
|
||||
// NOTE: Deallocate the memory used in the request and reset the string builder
|
||||
DN_ArenaTempEnd(&request->start_response_arena, DN_ArenaReset_Yes);
|
||||
// NOTE: Check that the request is completely detached
|
||||
DN_Assert(request->next == nullptr);
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ static int32_t DN_NET_CurlThreadEntryPoint_(DN_OSThread *thread)
|
||||
DN_Assert(req->response.state == DN_NETResponseState_Nil);
|
||||
DN_Assert(req->type != DN_NETRequestType_Nil);
|
||||
|
||||
// NOTE: Attach it to the CURL thread's request list
|
||||
// NOTE: Attach it to the CURL thread's request list
|
||||
for (DN_OS_MutexScope(&curl->list_mutex)) {
|
||||
DN_Assert(DN_NET_CurlRequestIsInList(curl->request_list, req));
|
||||
DN_DoublyLLDetach(curl->request_list, req);
|
||||
@@ -174,13 +174,21 @@ static int32_t DN_NET_CurlThreadEntryPoint_(DN_OSThread *thread)
|
||||
DN_Assert(event.request.handle != 0);
|
||||
DN_NETRequest *request = DN_Cast(DN_NETRequest *) event.request.handle;
|
||||
|
||||
// NOTE: Release resources
|
||||
// NOTE: Detach the request from the deinit list. This brings the request into this
|
||||
// thread's provenance, no other threads modifying the deinit list will race with us.
|
||||
for (DN_OS_MutexScope(&curl->list_mutex)) {
|
||||
DN_Assert(DN_NET_CurlRequestIsInList(curl->deinit_list, request));
|
||||
DN_DoublyLLDetach(curl->deinit_list, request);
|
||||
}
|
||||
|
||||
// NOTE: Now we can modify the request, release resources
|
||||
DN_NET_EndFinishedRequest(request);
|
||||
DN_OS_SemaphoreDeinit(&request->completion_sem);
|
||||
|
||||
curl_multi_remove_handle(curl->thread_curlm, curl_req->handle);
|
||||
curl_slist_free_all(curl_req->slist);
|
||||
curl_easy_reset(curl_req->handle);
|
||||
|
||||
CURL *copy = curl_req->handle;
|
||||
*curl_req = {};
|
||||
curl_req->handle = copy;
|
||||
@@ -190,14 +198,11 @@ static int32_t DN_NET_CurlThreadEntryPoint_(DN_OSThread *thread)
|
||||
resetter.arena = request->arena;
|
||||
resetter.gen = request->gen;
|
||||
DN_Memcpy(resetter.context, request->context, sizeof(resetter.context));
|
||||
*request = resetter;
|
||||
*request = resetter;
|
||||
|
||||
// NOTE: Add it to the free list
|
||||
for (DN_OS_MutexScope(&curl->list_mutex)) {
|
||||
DN_Assert(DN_NET_CurlRequestIsInList(curl->deinit_list, request));
|
||||
DN_DoublyLLDetach(curl->deinit_list, request);
|
||||
for (DN_OS_MutexScope(&curl->list_mutex))
|
||||
DN_DoublyLLAppend(curl->free_list, request);
|
||||
}
|
||||
} break;
|
||||
}
|
||||
}
|
||||
@@ -374,7 +379,7 @@ static int32_t DN_NET_CurlThreadEntryPoint_(DN_OSThread *thread)
|
||||
}
|
||||
|
||||
DN_NETRequest *request_copy = req;
|
||||
req = req->prev;
|
||||
req = req->prev;
|
||||
DN_NET_CurlMarkRequestDone_(net, request_copy);
|
||||
if (!req)
|
||||
break;
|
||||
@@ -418,7 +423,7 @@ void DN_NET_CurlInit(DN_NETCore *net, char *base, DN_U64 base_size)
|
||||
curl->thread_curlm = DN_Cast(CURLM *) curl_multi_init();
|
||||
|
||||
DN_FmtAppend(curl->thread.name.data, &curl->thread.name.size, sizeof(curl->thread.name.data), "NET (CURL)");
|
||||
DN_OS_ThreadInit(&curl->thread, DN_NET_CurlThreadEntryPoint_, nullptr, net);
|
||||
DN_OS_ThreadInit(&curl->thread, DN_NET_CurlThreadEntryPoint_, nullptr, DN_TCInitArgsDefault(), net);
|
||||
}
|
||||
|
||||
void DN_NET_CurlDeinit(DN_NETCore *net)
|
||||
@@ -445,13 +450,16 @@ static DN_NETRequestHandle DN_NET_CurlDoRequest_(DN_NETCore *net, DN_Str8 url, D
|
||||
|
||||
// NOTE None in the free list so allocate one
|
||||
if (!req) {
|
||||
DN_OS_MutexLock(&curl_core->list_mutex);
|
||||
DN_U64 arena_pos = DN_MemListPos(net->arena.mem);
|
||||
req = DN_ArenaNew(&net->arena, DN_NETRequest, DN_ZMem_Yes);
|
||||
DN_NETCurlRequest *curl_req = DN_ArenaNew(&net->arena, DN_NETCurlRequest, DN_ZMem_Yes);
|
||||
req = DN_ArenaNewZ(&net->arena, DN_NETRequest);
|
||||
DN_NETCurlRequest *curl_req = DN_ArenaNewZ(&net->arena, DN_NETCurlRequest);
|
||||
if (!req || !curl_req) {
|
||||
DN_MemListPopTo(net->arena.mem, arena_pos);
|
||||
DN_OS_MutexUnlock(&curl_core->list_mutex);
|
||||
return result;
|
||||
}
|
||||
DN_OS_MutexUnlock(&curl_core->list_mutex);
|
||||
|
||||
curl_req->handle = DN_Cast(CURL *) curl_easy_init();
|
||||
req->context[0] = DN_Cast(DN_UPtr) curl_req;
|
||||
|
||||
@@ -148,7 +148,7 @@ static void DN_NET_EmcHTTPProgressCallback(emscripten_fetch_t *fetch)
|
||||
|
||||
void DN_NET_EmcInit(DN_NETCore *net, char *base, DN_U64 base_size)
|
||||
{
|
||||
DN_NET_BaseInit_(net, base, base_size);
|
||||
DN_NET_BaseInit(net, base, base_size);
|
||||
DN_NETEmcCore *emc = DN_ArenaNew(&net->arena, DN_NETEmcCore, DN_ZMem_Yes);
|
||||
emc->pool = DN_PoolFromArena(&net->arena, 0);
|
||||
net->context = emc;
|
||||
@@ -192,7 +192,7 @@ static DN_NETRequest *DN_NET_EmcAllocRequest_(DN_NETCore *net)
|
||||
DN_NETRequestHandle DN_NET_EmcDoHTTP(DN_NETCore *net, DN_Str8 url, DN_Str8 method, DN_NETDoHTTPArgs const *args)
|
||||
{
|
||||
DN_NETRequest *req = DN_NET_EmcAllocRequest_(net);
|
||||
DN_NETRequestHandle result = DN_NET_SetupRequest_(req, url, method, args, DN_NETRequestType_HTTP);
|
||||
DN_NETRequestHandle result = DN_NET_SetupRequest(req, url, method, args, DN_NETRequestType_HTTP);
|
||||
|
||||
// NOTE: Setup the HTTP request via Emscripten
|
||||
emscripten_fetch_attr_t fetch_attribs = {};
|
||||
@@ -254,7 +254,7 @@ DN_NETRequestHandle DN_NET_EmcDoWS(DN_NETCore *net, DN_Str8 url)
|
||||
{
|
||||
DN_Assert(emscripten_websocket_is_supported());
|
||||
DN_NETRequest *req = DN_NET_EmcAllocRequest_(net);
|
||||
DN_NETRequestHandle result = DN_NET_SetupRequest_(req, url, /*method=*/DN_Str8Lit(""), /*args=*/nullptr, DN_NETRequestType_WS);
|
||||
DN_NETRequestHandle result = DN_NET_SetupRequest(req, url, /*method=*/DN_Str8Lit(""), /*args=*/nullptr, DN_NETRequestType_WS);
|
||||
if (!req)
|
||||
return result;
|
||||
|
||||
@@ -376,7 +376,7 @@ static DN_NETResponse DN_NET_EmcHandleFinishedRequest_(DN_NETCore *net, DN_NETEm
|
||||
}
|
||||
|
||||
if (end_request) {
|
||||
DN_NET_EndFinishedRequest_(request);
|
||||
DN_NET_EndFinishedRequest(request);
|
||||
emscripten_websocket_delete(emc_request->socket);
|
||||
emc_request->socket = 0;
|
||||
|
||||
|
||||
@@ -1222,7 +1222,7 @@ static DN_UTCore DN_TST_BaseArray()
|
||||
DN_ArrayEraseResult erase = DN_ArrayEraseRange(arr, &size, sizeof(arr[0]), 3, 2, DN_ArrayErase_Stable);
|
||||
int expected[] = {0, 1, 2, 5, 6, 7, 8, 9};
|
||||
DN_UT_Assert(&result, erase.items_erased == 2);
|
||||
DN_UT_AssertF(&result, erase.it_index == 2, "erase.it_index=%zu", erase.it_index);
|
||||
DN_UT_Assert(&result, erase.it_index == 3);
|
||||
DN_UT_Assert(&result, size == 8);
|
||||
DN_UT_Assert(&result, DN_Memcmp(arr, expected, size * sizeof(arr[0])) == 0);
|
||||
}
|
||||
@@ -1233,7 +1233,7 @@ static DN_UTCore DN_TST_BaseArray()
|
||||
DN_ArrayEraseResult erase = DN_ArrayEraseRange(arr, &size, sizeof(arr[0]), 5, -3, DN_ArrayErase_Stable);
|
||||
int expected[] = {0, 1, 2, 6, 7, 8, 9};
|
||||
DN_UT_Assert(&result, erase.items_erased == 3);
|
||||
DN_UT_Assert(&result, erase.it_index == 2);
|
||||
DN_UT_Assert(&result, erase.it_index == 3);
|
||||
DN_UT_Assert(&result, size == 7);
|
||||
DN_UT_Assert(&result, DN_Memcmp(arr, expected, size * sizeof(arr[0])) == 0);
|
||||
}
|
||||
@@ -1244,7 +1244,7 @@ static DN_UTCore DN_TST_BaseArray()
|
||||
DN_ArrayEraseResult erase = DN_ArrayEraseRange(arr, &size, sizeof(arr[0]), 5, -1, DN_ArrayErase_Stable);
|
||||
int expected[] = {0, 1, 2, 3, 4, 6, 7, 8, 9};
|
||||
DN_UT_Assert(&result, erase.items_erased == 1);
|
||||
DN_UT_Assert(&result, erase.it_index == 4);
|
||||
DN_UT_Assert(&result, erase.it_index == 5);
|
||||
DN_UT_Assert(&result, size == 9);
|
||||
DN_UT_Assert(&result, DN_Memcmp(arr, expected, size * sizeof(arr[0])) == 0);
|
||||
}
|
||||
@@ -1255,7 +1255,7 @@ static DN_UTCore DN_TST_BaseArray()
|
||||
DN_ArrayEraseResult erase = DN_ArrayEraseRange(arr, &size, sizeof(arr[0]), 3, 2, DN_ArrayErase_Unstable);
|
||||
int expected[] = {0, 1, 2, 8, 9, 5, 6, 7};
|
||||
DN_UT_Assert(&result, erase.items_erased == 2);
|
||||
DN_UT_Assert(&result, erase.it_index == 2);
|
||||
DN_UT_Assert(&result, erase.it_index == 3);
|
||||
DN_UT_Assert(&result, size == 8);
|
||||
DN_UT_Assert(&result, DN_Memcmp(arr, expected, size * sizeof(arr[0])) == 0);
|
||||
}
|
||||
@@ -1266,7 +1266,7 @@ static DN_UTCore DN_TST_BaseArray()
|
||||
DN_ArrayEraseResult erase = DN_ArrayEraseRange(arr, &size, sizeof(arr[0]), 5, -3, DN_ArrayErase_Unstable);
|
||||
int expected[] = {0, 1, 2, 7, 8, 9, 6};
|
||||
DN_UT_Assert(&result, erase.items_erased == 3);
|
||||
DN_UT_Assert(&result, erase.it_index == 2);
|
||||
DN_UT_Assert(&result, erase.it_index == 3);
|
||||
DN_UT_Assert(&result, size == 7);
|
||||
DN_UT_Assert(&result, DN_Memcmp(arr, expected, size * sizeof(arr[0])) == 0);
|
||||
}
|
||||
@@ -1288,7 +1288,7 @@ static DN_UTCore DN_TST_BaseArray()
|
||||
DN_ArrayEraseResult erase = DN_ArrayEraseRange(arr, &size, sizeof(arr[0]), 9, 2, DN_ArrayErase_Stable);
|
||||
int expected[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
|
||||
DN_UT_Assert(&result, erase.items_erased == 1);
|
||||
DN_UT_Assert(&result, erase.it_index == 8);
|
||||
DN_UT_Assert(&result, erase.it_index == 9);
|
||||
DN_UT_Assert(&result, size == 9);
|
||||
DN_UT_Assert(&result, DN_Memcmp(arr, expected, size * sizeof(arr[0])) == 0);
|
||||
}
|
||||
@@ -1334,7 +1334,7 @@ static DN_UTCore DN_TST_BaseArray()
|
||||
DN_ArrayEraseResult erase = DN_ArrayEraseRange(arr, &size, sizeof(arr[0]), 15, 2, DN_ArrayErase_Stable);
|
||||
int expected[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
|
||||
DN_UT_Assert(&result, erase.items_erased == 0);
|
||||
DN_UT_Assert(&result, erase.it_index == 9);
|
||||
DN_UT_Assert(&result, erase.it_index == 10);
|
||||
DN_UT_Assert(&result, size == 10);
|
||||
DN_UT_Assert(&result, DN_Memcmp(arr, expected, size * sizeof(arr[0])) == 0);
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ DN_MSVC_WARNING_PUSH
|
||||
DN_MSVC_WARNING_DISABLE(6262) // Function uses '29804' bytes of stack. Consider moving some data to heap.
|
||||
int main(int, char**)
|
||||
{
|
||||
DN_Core dn = {};
|
||||
DN_Core dn = {};
|
||||
DN_Init(&dn, DN_InitFlags_LogAllFeatures | DN_InitFlags_OS | DN_InitFlags_ThreadContext, DN_TCInitArgsDefault());
|
||||
DN_TST_RunSuite(DN_TSTPrint_Yes);
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user