From c8a7d28f61ab53d841efe38ddcf34be0db3104d9 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Sun, 26 Jul 2020 14:31:22 +0300 Subject: GmRequest: Tweaking cancel behavior --- src/gmrequest.c | 38 ++++++++++++++++---------------------- src/gmrequest.h | 1 - 2 files changed, 16 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/gmrequest.c b/src/gmrequest.c index 6f2c2bc5..e05679bd 100644 --- a/src/gmrequest.c +++ b/src/gmrequest.c @@ -48,21 +48,24 @@ void init_GmRequest(iGmRequest *d) { } void deinit_GmRequest(iGmRequest *d) { + if (d->req) { + iDisconnectObject(TlsRequest, d->req, readyRead, d); + iDisconnectObject(TlsRequest, d->req, finished, d); + } lock_Mutex(&d->mutex); if (d->timeoutId) { SDL_RemoveTimer(d->timeoutId); } - if (d->req) { - if (!isFinished_GmRequest(d)) { - iDisconnectObject(TlsRequest, d->req, readyRead, d); - iDisconnectObject(TlsRequest, d->req, finished, d); - cancel_TlsRequest(d->req); - d->state = finished_GmRequestState; - } - iRelease(d->req); - d->req = NULL; + if (!isFinished_GmRequest(d)) { + unlock_Mutex(&d->mutex); + cancel_TlsRequest(d->req); + d->state = finished_GmRequestState; } - unlock_Mutex(&d->mutex); + else { + unlock_Mutex(&d->mutex); + } + iRelease(d->req); + d->req = NULL; delete_Audience(d->finished); delete_Audience(d->updated); deinit_Block(&d->body); @@ -157,8 +160,8 @@ static void requestFinished_GmRequest_(iAnyObject *obj) { } SDL_RemoveTimer(d->timeoutId); d->timeoutId = 0; - iReleaseLater(d->req); - d->req = NULL; +// iReleaseLater(d->req); +// d->req = NULL; d->state = finished_GmRequestState; unlock_Mutex(&d->mutex); iNotifyAudience(d, finished, GmRequestFinished); @@ -186,6 +189,7 @@ void submit_GmRequest(iGmRequest *d) { } else { d->code = failedToOpenFile_GmStatusCode; + setCStr_String(&d->header, cstr_String(path)); } iRelease(f); d->state = finished_GmRequestState; @@ -212,16 +216,6 @@ iBool isFinished_GmRequest(const iGmRequest *d) { return done; } -const char *error_GmRequest(const iGmRequest *d) { - if (d->code == failedToOpenFile_GmStatusCode) { - return "Failed to open file"; - } - if (d->code == invalidHeader_GmStatusCode) { - return "Received invalid header (not Gemini?)"; - } - return NULL; /* TDOO: detailed error string */ -} - enum iGmStatusCode status_GmRequest(const iGmRequest *d) { return d->code; } diff --git a/src/gmrequest.h b/src/gmrequest.h index b2cd339b..270f976a 100644 --- a/src/gmrequest.h +++ b/src/gmrequest.h @@ -17,7 +17,6 @@ void setUrl_GmRequest (iGmRequest *, const iString *url); void submit_GmRequest (iGmRequest *); iBool isFinished_GmRequest (const iGmRequest *); -const char * error_GmRequest (const iGmRequest *); /* NULL if successful */ enum iGmStatusCode status_GmRequest (const iGmRequest *); const iString * meta_GmRequest (const iGmRequest *); const iBlock * body_GmRequest (const iGmRequest *); -- cgit v1.2.3