Files
cdesktop/cde/include/Dt/Lock.h
Jon Trulson 369308b737 The great includes migration of 2019 (autotools)
Ok - so one of the steps in building CDE is an early phase called the
includes phase (make includes).  At this point, all of the public
header files are exported to exports/include/Dt, DtI, ...

Then, the software is built using that include dir.

This of course does not work in autotools.  Much of the software does
things like #include <Dt/something.h>, so in order for the build to
succeed, this behavior must be represented/replicated in some way.

It seems the usual way of dealing with this is to place all public
headers (and in some projects, ALL headers) into a toplevel include
directory.

We now do this for all public headers - they have been moved from
wherever they were and placed in the appropriate spot in includes/

This will break the Imake 'make includes' phase unless the Imakefiles
are fixed (remove the HEADERS = stuff, and the incdir defines).  This
has not been done at this point since in reality, once autotools works
properly, there will be no need for the Imake stuff anymore, and I
intend to get rid of it.

This is just a warning for now - Imake builds in this tree will now
fail at the 'includes' stage.

This commit is only the migration.  In upcoming commits, libtt will be
fixed so that the hack being used before to get around this problem is
removed as there will no longer be any need.

And then the autotools work continues...
2019-10-25 17:01:34 -06:00

146 lines
4.1 KiB
C

/*
* CDE - Common Desktop Environment
*
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
*
* These libraries and programs are free software; you can
* redistribute them and/or modify them under the terms of the GNU
* Lesser General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* These libraries and programs are distributed in the hope that
* they will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with these libraries and programs; if not, write
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*/
/*
* File: Lock.h $XConsortium: Lock.h /main/4 1995/10/26 15:24:02 rswiston $
* Language: C
*
* (c) Copyright 1990, Hewlett-Packard Company, all rights reserved.
*
* (c) Copyright 1993, 1994 Hewlett-Packard Company *
* (c) Copyright 1993, 1994 International Business Machines Corp. *
* (c) Copyright 1993, 1994 Sun Microsystems, Inc. *
* (c) Copyright 1993, 1994 Novell, Inc. *
*/
#ifndef _Dt_lock_h
#define _Dt_lock_h
/*
GENERAL DESCRIPTION:
The DT lock facility provides simple exclusive locking. It
(as of 6/19/90) is based on the X11 selection-ownership
mechanism, though users of Dt locking do not need to be aware of
this.
X11 server grabs are judiciously used to guarantee atomicity of
operations. If a process which holds a lock dies (or closes its
X11 server connection for some other reason), the lock will be
automatically released.
Locks are identified by a string. There is no mechanism to
allocate unique lock strings to clients; users must take care to
choose a string that will not be easily duplicated by some other
client.
SAMPLE CODE:
#define MY_LOCK "MYAPP_MY_LOCK"
...
if (_DtGetLock (display, MY_LOCK)) {
<do whatever it is I want to do>
_DtReleaseLock (display, MY_LOCK);
}
else {
<do the alternative>
}
*/
extern int _DtGetLock (
Display *display,
char *lock_name);
/*
DESCRIPTION:
_DtGetLock attempts to get the specified lock. If nobody holds
the lock, _DtGetLock will obtain the lock and return 1. If
somebody else already holds the lock, the lock will not be
disturbed and _DtGetLock will return 0.
If the process which owns a lock dies (or closes its X11 server
connection), the lock will be automatically released. To
explicitly release a lock, use _DtReleaseLock.
SYNOPSIS:
success = _DtGetLock (display, lock);
int success; Returns 1 if the lock is obtained,
0 if not.
Display *display; The X11 server connection which will
hold the lock.
char *lock; The string which names the lock.
*/
extern void _DtReleaseLock (
Display *display,
char *lock_name);
/*
DESCRIPTION:
_DtReleaseLock releases a lock obtained by _DtGetLock.
WARNING!! It is perfectly legal for one process to release
a lock held by another process. By convention you should only
release locks previously obtained by your process from _DtGetLock
unless you are playing God and know what you are doing.
SYNOPSIS:
(void) _DtReleaseLock (display, lock);
Display *display; The X11 server connection which holds
the lock.
char *lock; The string which names the lock.
*/
extern int _DtTestLock (
Display *display,
char *lock_name);
/*
DESCRIPTION:
_DtTestLock returns a status indicating whether anybody holds the
specified lock.
SYNOPSIS:
status = _DtTestLock (display, lock);
int success; Returns 1 if anybody holds the lock,
0 otherwise.
Display *display; The X11 server connection.
char *lock; The string which names the lock.
*/
#endif /* _Dt_lock_h */
/* Do not add anything after this endif. */