network::HttpClient::getInstance()->send
//Add a get task to queue
void HttpClient::send(HttpRequest* request)
{
if (false == lazyInitThreadSemphore())
{
return;
}
if (!request)
{
return;
}
request->retain();
_requestQueueMutex.lock();
_requestQueue.pushBack(request);
_requestQueueMutex.unlock();
// Notify thread start to work
_sleepCondition.notify_one();
}
如果
layer1有个network::HttpRequest()的请求
回调为layer1::callback1
layer2也有个network::HttpRequest()的请求
回调为layer2::callback2
layer1和layer2来回不停切换
切换时把对应的回调清空
->setResponseCallback(nullptr);
虽然有加锁
_requestQueueMutex.lock();
但某些极端情况下仍然存在线程同步的问题
导致从layer1切换到layer2后,layer1的callback才激活
而这时layer1已经释放掉了,导致程序非法
类似以前的TextureCache::addImageAsync
后者新版已经用的新的方法修正过了
