bool JSONParser::parseFloat() { const char * str; char * endptr; double value; char * endptrInt; long long valueInt; AutoreleasePool * pool; pool = new AutoreleasePool(); if (mContent->length() > mPosition + 50) { str = mContent->substringWithRange(RangeMake(mPosition, 50))->UTF8Characters(); } else { str = mContent->substringFromIndex(mPosition)->UTF8Characters(); } value = strtod(str, &endptr); if (endptr == str) { pool->release(); return false; } valueInt = strtoll(str, &endptrInt, 0); if (endptr == endptrInt) { mPosition += endptrInt - str; mResult = Value::valueWithLongLongValue(valueInt)->retain(); } else { mPosition += endptr - str; mResult = Value::valueWithDoubleValue(value); } pool->release(); return true; }
static void logger(mailsmtp * smtp, int log_type, const char * buffer, size_t size, void * context) { SMTPSession * session = (SMTPSession *) context; session->lockConnectionLogger(); if (session->connectionLoggerNoLock() == NULL) { session->unlockConnectionLogger(); return; } ConnectionLogType type = getConnectionType(log_type); if ((int) type == -1) { // in case of MAILSTREAM_LOG_TYPE_INFO_RECEIVED or MAILSTREAM_LOG_TYPE_INFO_SENT. session->unlockConnectionLogger(); return; } bool isBuffer = isBufferFromLogType(log_type); if (isBuffer) { AutoreleasePool * pool = new AutoreleasePool(); Data * data = Data::dataWithBytes(buffer, (unsigned int) size); session->connectionLoggerNoLock()->log(session, type, data); pool->release(); } else { session->connectionLoggerNoLock()->log(session, type, NULL); } session->unlockConnectionLogger(); }
void AutoreleasePool::autorelease(Object * obj) { AutoreleasePool * pool = AutoreleasePool::currentAutoreleasePool(); if (pool == NULL) { MCLog("-autorelease called with no current autoreleasepool\n"); return; } pool->add(obj); }
bool PoolManager::isObjectInPools(Ref * obj) const { for (int i = 0, size = _releasePoolStack.size(); i < size; ++i) { AutoreleasePool * pool = _releasePoolStack[i]; if (pool->contains(obj)) { return true; } } return false; }
bool JSONParser::scanKeyword(String * str, unsigned int position) { bool result; AutoreleasePool * pool; if (position + str->length() >= mContent->length()) return false; pool = new AutoreleasePool(); result = false; if (mContent->substringWithRange(RangeMake(position, str->length()))->isEqual(str)) result = true; pool->release(); return result; }
void SMTPSession::sendMessage(Data * messageData, SMTPProgressCallback * callback, ErrorCode * pError) { AutoreleasePool * pool = new AutoreleasePool(); MessageParser * parser = new MessageParser(messageData); Array * recipients = new Array(); if (parser->header()->to() != NULL) { recipients->addObjectsFromArray(parser->header()->to()); } if (parser->header()->cc() != NULL) { recipients->addObjectsFromArray(parser->header()->cc()); } if (parser->header()->bcc() != NULL) { recipients->addObjectsFromArray(parser->header()->bcc()); } Address * from = parser->header()->from(); sendMessage(from, recipients, messageData, callback, pError); recipients->release(); parser->release(); pool->release(); }
void OperationQueue::runOperations() { MCLog("start thread"); mailsem_up(mStartSem); while (true) { Operation * op = NULL; bool needsCheckRunning = false; bool quitting; AutoreleasePool * pool = new AutoreleasePool(); mailsem_down(mOperationSem); pthread_mutex_lock(&mLock); if (mOperations->count() > 0) { op = (Operation *) mOperations->objectAtIndex(0); } quitting = mQuitting; pthread_mutex_unlock(&mLock); //MCLog("quitting %i %p", mQuitting, op); if ((op == NULL) && quitting) { MCLog("stopping %p", this); mailsem_up(mStopSem); retain(); // (2) #if __APPLE__ performMethodOnDispatchQueue((Object::Method) &OperationQueue::stoppedOnMainThread, NULL, mDispatchQueue, true); #else performMethodOnMainThread((Object::Method) &OperationQueue::stoppedOnMainThread, NULL, true); #endif pool->release(); break; } performOnCallbackThread(op, (Object::Method) &OperationQueue::beforeMain, op, true); if (!op->isCancelled() || op->shouldRunWhenCancelled()) { op->main(); } op->retain()->autorelease(); pthread_mutex_lock(&mLock); mOperations->removeObjectAtIndex(0); if (mOperations->count() == 0) { if (mWaiting) { mailsem_up(mWaitingFinishedSem); } needsCheckRunning = true; } pthread_mutex_unlock(&mLock); if (!op->isCancelled()) { performOnCallbackThread(op, (Object::Method) &OperationQueue::callbackOnMainThread, op, true); } if (needsCheckRunning) { retain(); // (1) //MCLog("check running %p", this); #if __APPLE__ performMethodOnDispatchQueue((Object::Method) &OperationQueue::checkRunningOnMainThread, this, mDispatchQueue); #else performMethodOnMainThread((Object::Method) &OperationQueue::checkRunningOnMainThread, this); #endif } pool->release(); } MCLog("cleanup thread %p", this); }