Skip to content

Commit d26beaf

Browse files
bmehta001Copilot
andcommitted
Adopt shared Apple HTTP session
Switch HttpClient_Apple back to the shared static NSURLSession model with defaultSessionConfiguration while keeping request cancellation scoped to m_dataTask and retaining the locked CancelAllRequests fix. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 668ee56 commit d26beaf

2 files changed

Lines changed: 9 additions & 23 deletions

File tree

‎lib/http/HttpClient_Apple.hpp‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,10 @@ namespace MAT_NS_BEGIN {
2525

2626
void Erase(IHttpRequest* req);
2727
void Add(IHttpRequest* req);
28-
void* GetSession() const;
2928

3029
private:
3130
std::mutex m_requestsMtx;
3231
std::map<std::string, IHttpRequest*> m_requests;
33-
void* m_session = nullptr; // NSURLSession*, opaque in header
3432
};
3533

3634
} MAT_NS_END

‎lib/http/HttpClient_Apple.mm‎

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@
2929
return std::string("RESP-") + std::to_string(seq.fetch_add(1));
3030
}
3131

32+
static dispatch_once_t once;
33+
static NSURLSession* session;
34+
3235
class HttpRequestApple : public SimpleHttpRequest
3336
{
3437
public:
@@ -37,6 +40,10 @@
3740
m_parent(parent)
3841
{
3942
m_parent->Add(static_cast<IHttpRequest*>(this));
43+
dispatch_once(&once, ^{
44+
NSURLSessionConfiguration* sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
45+
session = [NSURLSession sessionWithConfiguration:sessionConfig];
46+
});
4047
}
4148

4249
~HttpRequestApple() noexcept
@@ -65,18 +72,16 @@ void SendAsync(IHttpResponseCallback* callback)
6572
HandleResponse(data, response, error);
6673
};
6774

68-
NSURLSession* sess = (__bridge NSURLSession*)m_parent->GetSession();
69-
7075
if(equalsIgnoreCase(m_method, "get"))
7176
{
7277
[m_urlRequest setHTTPMethod:@"GET"];
73-
m_dataTask = [sess dataTaskWithRequest:m_urlRequest completionHandler:m_completionMethod];
78+
m_dataTask = [session dataTaskWithRequest:m_urlRequest completionHandler:m_completionMethod];
7479
}
7580
else
7681
{
7782
[m_urlRequest setHTTPMethod:@"POST"];
7883
NSData* postData = [NSData dataWithBytes:m_body.data() length:m_body.size()];
79-
m_dataTask = [sess uploadTaskWithRequest:m_urlRequest fromData:postData completionHandler:m_completionMethod];
84+
m_dataTask = [session uploadTaskWithRequest:m_urlRequest fromData:postData completionHandler:m_completionMethod];
8085
}
8186

8287
[m_dataTask resume];
@@ -139,31 +144,14 @@ void Cancel()
139144

140145
HttpClient_Apple::HttpClient_Apple()
141146
{
142-
@autoreleasepool
143-
{
144-
NSURLSessionConfiguration* sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
145-
m_session = (__bridge_retained void*)[NSURLSession sessionWithConfiguration:sessionConfig];
146-
}
147147
LOG_TRACE("Initializing HttpClient_Apple...");
148148
}
149149

150150
HttpClient_Apple::~HttpClient_Apple() noexcept
151151
{
152-
// Invalidate and release the session. By this point, FlushAndTeardown
153-
// should have called CancelAllRequests which drains all in-flight tasks.
154-
if (m_session) {
155-
NSURLSession* sess = (__bridge_transfer NSURLSession*)m_session;
156-
[sess invalidateAndCancel];
157-
m_session = nullptr;
158-
}
159152
LOG_TRACE("Shutting down HttpClient_Apple...");
160153
}
161154

162-
void* HttpClient_Apple::GetSession() const
163-
{
164-
return m_session;
165-
}
166-
167155
IHttpRequest* HttpClient_Apple::CreateRequest()
168156
{
169157
auto request = new HttpRequestApple(this);

0 commit comments

Comments
 (0)