~oif-team/ubuntu/natty/qt4-x11/xi2.1

« back to all changes in this revision

Viewing changes to src/corelib/kernel/qsystemsemaphore.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Alessandro Ghersi
  • Date: 2009-11-02 18:30:08 UTC
  • mfrom: (1.2.2 upstream)
  • mto: (15.2.5 experimental)
  • mto: This revision was merged to the branch mainline in revision 88.
  • Revision ID: james.westby@ubuntu.com-20091102183008-b6a4gcs128mvfb3m
Tags: upstream-4.6.0~beta1
ImportĀ upstreamĀ versionĀ 4.6.0~beta1

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/****************************************************************************
2
2
**
3
3
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
 
4
** All rights reserved.
4
5
** Contact: Nokia Corporation (qt-info@nokia.com)
5
6
**
6
7
** This file is part of the QtCore module of the Qt Toolkit.
7
8
**
8
9
** $QT_BEGIN_LICENSE:LGPL$
9
 
** Commercial Usage
10
 
** Licensees holding valid Qt Commercial licenses may use this file in
11
 
** accordance with the Qt Commercial License Agreement provided with the
12
 
** Software or, alternatively, in accordance with the terms contained in
13
 
** a written agreement between you and Nokia.
 
10
** No Commercial Usage
 
11
** This file contains pre-release code and may not be distributed.
 
12
** You may use this file in accordance with the terms and conditions
 
13
** contained in the Technology Preview License Agreement accompanying
 
14
** this package.
14
15
**
15
16
** GNU Lesser General Public License Usage
16
17
** Alternatively, this file may be used under the terms of the GNU Lesser
20
21
** ensure the GNU Lesser General Public License version 2.1 requirements
21
22
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
22
23
**
23
 
** In addition, as a special exception, Nokia gives you certain
24
 
** additional rights. These rights are described in the Nokia Qt LGPL
25
 
** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
26
 
** package.
27
 
**
28
 
** GNU General Public License Usage
29
 
** Alternatively, this file may be used under the terms of the GNU
30
 
** General Public License version 3.0 as published by the Free Software
31
 
** Foundation and appearing in the file LICENSE.GPL included in the
32
 
** packaging of this file.  Please review the following information to
33
 
** ensure the GNU General Public License version 3.0 requirements will be
34
 
** met: http://www.gnu.org/copyleft/gpl.html.
35
 
**
36
 
** If you are unsure which license is appropriate for your use, please
37
 
** contact the sales department at http://www.qtsoftware.com/contact.
 
24
** In addition, as a special exception, Nokia gives you certain additional
 
25
** rights.  These rights are described in the Nokia Qt LGPL Exception
 
26
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
 
27
**
 
28
** If you have questions regarding the use of this file, please contact
 
29
** Nokia at qt-info@nokia.com.
 
30
**
 
31
**
 
32
**
 
33
**
 
34
**
 
35
**
 
36
**
 
37
**
38
38
** $QT_END_LICENSE$
39
39
**
40
40
****************************************************************************/
49
49
 
50
50
/*!
51
51
  \class QSystemSemaphore
52
 
  \ingroup ipc
53
52
  \since 4.4
54
53
 
55
54
  \brief The QSystemSemaphore class provides a general counting system semaphore.
123
122
  operations that were not released. Thus if the process acquires a
124
123
  resource and then exits without releasing it, Unix will release that
125
124
  resource.
 
125
 
 
126
  \o Symbian: QSystemSemaphore behaves the same as Windows semaphores.
 
127
  In other words, the operating system owns the semaphore and ignores
 
128
  QSystemSemaphore::AccessMode.
 
129
 
126
130
  \endlist
127
131
 
128
132
  \sa QSharedMemory, QSemaphore
147
151
  creates a new semaphore for that key and sets its resource count to
148
152
  \a initialValue.
149
153
 
150
 
  In Windows, \a mode is ignored, and the system always tries to
 
154
  In Windows and in Symbian, \a mode is ignored, and the system always tries to
151
155
  create a semaphore for the specified \a key. If the system does not
152
156
  already have a semaphore identified as \a key, it creates the
153
157
  semaphore and sets its resource count to \a initialValue. But if the
165
169
  \sa acquire(), key()
166
170
 */
167
171
QSystemSemaphore::QSystemSemaphore(const QString &key, int initialValue, AccessMode mode)
 
172
    : d(new QSystemSemaphorePrivate)
168
173
{
169
 
    d = new QSystemSemaphorePrivate;
170
174
    setKey(key, initialValue, mode);
171
175
}
172
176
 
188
192
QSystemSemaphore::~QSystemSemaphore()
189
193
{
190
194
    d->cleanHandle();
191
 
    delete d;
192
195
}
193
196
 
194
197
/*!
198
201
  enable handling the problem in Unix implementations of semaphores
199
202
  that survive a crash. In Unix, when a semaphore survives a crash, we
200
203
  need a way to force it to reset its resource count, when the system
201
 
  reuses the semaphore. In Windows, where semaphores can't survive a
 
204
  reuses the semaphore. In Windows and in Symbian, where semaphores can't survive a
202
205
  crash, this enum has no effect.
203
206
 
204
207
  \value Open If the semaphore already exists, its initial resource
211
214
  This value should be passed to the constructor, when the first
212
215
  semaphore for a particular key is constructed and you know that if
213
216
  the semaphore already exists it could only be because of a crash. In
214
 
  Windows, where a semaphore can't survive a crash, Create and Open
 
217
  Windows and in Symbian, where a semaphore can't survive a crash, Create and Open
215
218
  have the same behavior.
216
219
*/
217
220
 
231
234
        return;
232
235
    d->error = NoError;
233
236
    d->errorString = QString();
234
 
#ifndef Q_OS_WIN
 
237
#if !defined(Q_OS_WIN) && !defined(Q_OS_SYMBIAN)
235
238
    // optimization to not destroy/create the file & semaphore
236
239
    if (key == d->key && mode == Create && d->createdSemaphore && d->createdFile) {
237
240
        d->initialValue = initialValue;