summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/kernel/tqlock.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/src/kernel/tqlock.cpp')
-rw-r--r--tqtinterface/qt4/src/kernel/tqlock.cpp297
1 files changed, 0 insertions, 297 deletions
diff --git a/tqtinterface/qt4/src/kernel/tqlock.cpp b/tqtinterface/qt4/src/kernel/tqlock.cpp
deleted file mode 100644
index 8e32602..0000000
--- a/tqtinterface/qt4/src/kernel/tqlock.cpp
+++ /dev/null
@@ -1,297 +0,0 @@
-/****************************************************************************
-**
-** Definition of TQLock class. This manages interprocess locking
-**
-** Created : 20000406
-**
-** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved.
-**
-** This file is part of the kernel module of the TQt GUI Toolkit.
-**
-** This file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free
-** Software Foundation and appearing in the files LICENSE.GPL2
-** and LICENSE.GPL3 included in the packaging of this file.
-** Alternatively you may (at your option) use any later version
-** of the GNU General Public License if such license has been
-** publicly approved by Trolltech ASA (or its successors, if any)
-** and the KDE Free TQt Foundation.
-**
-** Please review the following information to ensure GNU General
-** Public Licensing requirements will be met:
-** http://trolltech.com/products/qt/licenses/licensing/opensource/.
-** If you are unsure which license is appropriate for your use, please
-** review the following information:
-** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
-** or contact the sales department at sales@trolltech.com.
-**
-** Licensees holding valid TQt Commercial licenses may use this file in
-** accordance with the TQt Commercial License Agreement provided with
-** the Software.
-**
-** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
-** herein.
-**
-**********************************************************************/
-
-#include "tqlock_p.h"
-
-#ifndef TQT_NO_TQWS_MULTIPROCESS
-
-#include <unistd.h>
-#include <sys/types.h>
-#if defined(TQ_OS_MACX)
-#define TQ_NO_SEMAPHORE
-#include <sys/stat.h>
-#include <sys/file.h>
-#else
-#include <sys/sem.h>
-#if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED) \
- || defined(TQ_OS_FREEBSD) || defined(TQ_OS_OPENBSD) || defined(TQ_OS_NETBSD) || defined(TQ_OS_BSDI)
-/* union semun is defined by including <sys/sem.h> */
-#else
-/* according to X/OPEN we have to define it ourselves */
-union semun {
- int val; /* value for SETVAL */
- struct semid_ds *buf; /* buffer for IPC_STAT, IPC_SET */
- unsigned short *array; /* array for GETALL, SETALL */
-};
-#endif
-#endif
-#include <sys/ipc.h>
-#include <string.h>
-#include <errno.h>
-
-#define MAX_LOCKS 200 // maximum simultaneous read locks
-
-class TQLockData
-{
-public:
-#ifdef TQ_NO_SEMAPHORE
- TQCString file;
-#endif
- int id;
- int count;
- bool owned;
-};
-
-#endif
-
-/*!
- \class TQLock qlock_p.h
- \brief The TQLock class is a wrapper for a System V shared semaphore.
-
- \ingroup qws
- \ingroup io
-
- \internal
-
- It is used by TQt/Embedded for synchronizing access to the graphics
- card and shared memory region between processes.
-*/
-
-/*!
- \enum TQLock::Type
-
- \value Read
- \value Write
-*/
-
-/*!
- \fn TQLock::TQLock( const TQString &filename, char id, bool create )
-
- Creates a lock. \a filename is the file path of the Unix-domain
- socket the TQt/Embedded client is using. \a id is the name of the
- particular lock to be created on that socket. If \a create is TRUE
- the lock is to be created (as the TQt/Embedded server does); if \a
- create is FALSE the lock should exist already (as the TQt/Embedded
- client expects).
-*/
-
-TQLock::TQLock( const TQString &filename, char id, bool create )
-{
-#ifndef TQT_NO_TQWS_MULTIPROCESS
- data = new TQLockData;
- data->count = 0;
-#ifdef TQ_NO_SEMAPHORE
- data->file = TQString(filename+id).local8Bit();
- for(int x = 0; x < 2; x++) {
- data->id = open(data->file, O_RDWR | (x ? O_CREAT : 0), S_IRWXU);
- if(data->id != -1 || !create) {
- data->owned = x;
- break;
- }
- }
-#else
- key_t semkey = ftok(filename, id);
- data->id = semget(semkey,0,0);
- data->owned = create;
- if ( create ) {
- semun arg; arg.val = 0;
- if ( data->id != -1 )
- semctl(data->id,0,IPC_RMID,arg);
- data->id = semget(semkey,1,IPC_CREAT|0600);
- arg.val = MAX_LOCKS;
- semctl(data->id,0,SETVAL,arg);
- }
-#endif
- if ( data->id == -1 ) {
- qWarning( "Cannot %s semaphore %s \'%c\'",
- create ? "create" : "get", filename.latin1(), id );
- qDebug("Error %d %s\n",errno,strerror(errno));
- }
-#endif
-}
-
-/*!
- \fn TQLock::~TQLock()
-
- Destroys a lock
-*/
-
-TQLock::~TQLock()
-{
-#ifndef TQT_NO_TQWS_MULTIPROCESS
- if ( locked() )
- unlock();
-#ifdef TQ_NO_SEMAPHORE
- if(isValid()) {
- close(data->id);
- if( data->owned )
- unlink( data->file );
- }
-#else
- if(data->owned) {
- semun arg; arg.val = 0;
- semctl( data->id, 0, IPC_RMID, arg );
- }
-#endif
- delete data;
-#endif
-}
-
-/*!
- \fn bool TQLock::isValid() const
-
- Returns TRUE if the lock constructor was succesful; returns FALSE if
- the lock could not be created or was not available to connect to.
-*/
-
-bool TQLock::isValid() const
-{
-#ifndef TQT_NO_TQWS_MULTIPROCESS
- return (data->id != -1);
-#else
- return TRUE;
-#endif
-}
-
-/*!
- Locks the semaphore with a lock of type \a t. Locks can either be
- \c Read or \c Write. If a lock is \c Read, attempts by other
- processes to obtain \c Read locks will succeed, and \c Write
- attempts will block until the lock is unlocked. If locked as \c
- Write, all attempts to lock by other processes will block until
- the lock is unlocked. Locks are stacked: i.e. a given TQLock can be
- locked multiple times by the same process without blocking, and
- will only be unlocked after a corresponding number of unlock()
- calls.
-*/
-
-void TQLock::lock( Type t )
-{
-#ifndef TQT_NO_TQWS_MULTIPROCESS
- if ( !data->count ) {
-#ifdef TQ_NO_SEMAPHORE
- int op = LOCK_SH;
- if(t == Write)
- op = LOCK_EX;
- for( int rv=1; rv; ) {
- rv = flock(data->id, op);
- if (rv == -1 && errno != EINTR)
- qDebug("Semop lock failure %s",strerror(errno));
- }
-#else
- sembuf sops;
- sops.sem_num = 0;
- sops.sem_flg = SEM_UNDO;
-
- if ( t == Write ) {
- sops.sem_op = -MAX_LOCKS;
- type = Write;
- } else {
- sops.sem_op = -1;
- type = Read;
- }
-
- int rv;
- do {
- rv = semop(data->id,&sops,1);
- if (rv == -1 && errno != EINTR)
- qDebug("Semop lock failure %s",strerror(errno));
- } while ( rv == -1 && errno == EINTR );
-#endif
- }
- data->count++;
-#endif
-}
-
-/*!
- \fn void TQLock::unlock()
-
- Unlocks the semaphore. If other processes were blocking waiting to
- lock() the semaphore, one of them will wake up and succeed in
- lock()ing.
-*/
-
-void TQLock::unlock()
-{
-#ifndef TQT_NO_TQWS_MULTIPROCESS
- if( data->count ) {
- data->count--;
- if( !data->count ) {
-#ifdef TQ_NO_SEMAPHORE
- for( int rv=1; rv; ) {
- rv = flock(data->id, LOCK_UN);
- if (rv == -1 && errno != EINTR)
- qDebug("Semop lock failure %s",strerror(errno));
- }
-#else
- sembuf sops;
- sops.sem_num = 0;
- sops.sem_op = 1;
- sops.sem_flg = SEM_UNDO;
- if ( type == Write )
- sops.sem_op = MAX_LOCKS;
-
- int rv;
- do {
- rv = semop(data->id,&sops,1);
- if (rv == -1 && errno != EINTR)
- qDebug("Semop unlock failure %s",strerror(errno));
- } while ( rv == -1 && errno == EINTR );
-#endif
- }
- } else {
- qDebug("Unlock without corresponding lock");
- }
-#endif
-}
-
-/*!
- \fn bool TQLock::locked() const
-
- Returns TRUE if the lock is currently held by the current process;
- otherwise returns FALSE.
-*/
-
-bool TQLock::locked() const
-{
-#ifndef TQT_NO_TQWS_MULTIPROCESS
- return (data->count > 0);
-#else
- return FALSE;
-#endif
-}