Fix typo in license headers
[oweals/cde.git] / cde / lib / DtSvc / DtUtil2 / lock.c
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these libraries and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /*
24  * File:         lock.c $XConsortium: lock.c /main/4 1995/10/26 15:33:05 rswiston $
25  * Language:     C
26  *
27  * (C) Copyright 1989, Hewlett-Packard, all rights reserved.
28  *
29  * (c) Copyright 1993, 1994 Hewlett-Packard Company                     *
30  * (c) Copyright 1993, 1994 International Business Machines Corp.       *
31  * (c) Copyright 1993, 1994 Sun Microsystems, Inc.                      *
32  * (c) Copyright 1993, 1994 Novell, Inc.                                *
33  */
34
35 #include <X11/Xlib.h>
36
37
38 /********    Public Function Declarations    ********/
39
40 extern int _DtGetLock( Display *display, char *lock_name) ;
41 extern void _DtReleaseLock( Display *display, char *lock_name) ;
42 extern int _DtTestLock( Display *display, char *lock_name) ;
43
44 /********    End Public Function Declarations    ********/
45
46
47 int 
48 _DtGetLock(
49         Display *display,
50         char *lock_name )
51 {
52    Atom lock_atom;
53    Window selection_owner;
54    Window root_window;
55   
56    /* Do as much processing as possible before grabbing the server. */
57    lock_atom = XInternAtom (display, lock_name, False);
58    root_window = DefaultRootWindow (display);
59
60    /* Do an atomic test-and-set of the lock.  To make this atomic we
61       must grab the server. */
62    XGrabServer (display);
63    if ((selection_owner = XGetSelectionOwner (display, lock_atom)) == None)
64       XSetSelectionOwner (display, lock_atom, root_window, CurrentTime);
65    XUngrabServer (display);
66    XFlush (display);
67   
68    /* If the lock was clear then it was successfully acquired. */
69    if (selection_owner == None)
70       return (1);
71    else
72       return (0);
73 }
74
75 void 
76 _DtReleaseLock(
77         Display *display,
78         char *lock_name )
79 {
80    Atom lock_atom;
81   
82    lock_atom = XInternAtom (display, lock_name, False);
83    XSetSelectionOwner (display, lock_atom, None, CurrentTime);
84    XFlush (display);  /* added to release lock NOW */
85 }
86
87 int 
88 _DtTestLock(
89         Display *display,
90         char *lock_name )
91 {
92    Atom lock_atom;
93   
94    lock_atom = XInternAtom (display, lock_name, False);
95    
96    if (XGetSelectionOwner (display, lock_atom) == None)
97       return (0);
98    else 
99       return (1);
100 }
101