Exemplo n.º 1
0
bool QDBusArgumentPrivate::checkWrite(QDBusArgumentPrivate *&d)
{
    if (!d)
        return false;
    if (d->direction == Marshalling) {
        if (!d->marshaller()->ok)
            return false;

        if (d->message && d->ref != 1) {
            QDBusMarshaller *dd = new QDBusMarshaller;
            dd->message = dbus_message_copy(d->message);
            dbus_message_iter_init_append(dd->message, &dd->iterator);

            QDBusArgumentPrivate *old =
                qAtomicSetPtr(&d, static_cast<QDBusArgumentPrivate *>(dd));
            if (!old->ref.deref())
                delete old;
        }
        return true;
    }

#ifdef QT_DEBUG
    qFatal("QDBusArgument: write from a read-only object");
#else
    qWarning("QDBusArgument: write from a read-only object");
#endif
    return false;
}
Exemplo n.º 2
0
/*!
    \fn QTextDocumentFragment &QTextDocumentFragment::operator=(const QTextDocumentFragment &other)

    Assigns the \a other fragment to this fragment.
*/
QTextDocumentFragment &QTextDocumentFragment::operator=(const QTextDocumentFragment &rhs)
{
    QTextDocumentFragmentPrivate *x = rhs.d;
    if (x)
        x->ref.ref();
    x = qAtomicSetPtr(&d, x);
    if (x && !x->ref.deref())
        delete x;
    return *this;
}
Exemplo n.º 3
0
QListData::Data *QListData::detach()
{
    Q_ASSERT(d->ref != 1);
    Data *x = static_cast<Data *>(qMalloc(DataHeaderSize + d->alloc * sizeof(void *)));
    ::memcpy(x, d, DataHeaderSize + d->alloc * sizeof(void *));
    x->alloc = d->alloc;
    x->ref.init(1);
    x->sharable = true;
    if (!x->alloc)
        x->begin = x->end = 0;

    x = qAtomicSetPtr(&d, x);
    if (!x->ref.deref())
        return x;
    return 0;
}
Exemplo n.º 4
0
/*!
  \internal
*/
void QAuthenticator::detach()
{
    if (!d) {
        d = new QAuthenticatorPrivate;
        d->ref.ref();
        return;
    }
    
    if (d->ref.ref() != 1) {
        QAuthenticatorPrivate *x = new QAuthenticatorPrivate(*d);
        x = qAtomicSetPtr(&d, x);
        if (!x->ref.deref())
            delete x;
    }
    d->phase = QAuthenticatorPrivate::Start;
}
Exemplo n.º 5
0
bool QDBusArgumentPrivate::checkReadAndDetach(QDBusArgumentPrivate *&d)
{
    if (!checkRead(d))
        return false;           //  don't bother

    if (d->ref == 1)
        return true;            // no need to detach

    QDBusDemarshaller *dd = new QDBusDemarshaller;
    dd->message = dbus_message_ref(d->message);
    dd->iterator = static_cast<QDBusDemarshaller*>(d)->iterator;

    QDBusArgumentPrivate *old =
        qAtomicSetPtr(&d, static_cast<QDBusArgumentPrivate *>(dd));
    if (!old->ref.deref())
        delete old;
    return true;
}