Beispiel #1
0
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;
}
Beispiel #2
0
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();
}
Beispiel #3
0
void AutoreleasePool::autorelease(Object * obj)
{
    AutoreleasePool * pool = AutoreleasePool::currentAutoreleasePool();
    if (pool == NULL) {
        MCLog("-autorelease called with no current autoreleasepool\n");
        return;
    }
    pool->add(obj);
}
Beispiel #4
0
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;
}
Beispiel #5
0
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;
}
Beispiel #6
0
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();
}
Beispiel #7
0
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);
}