/[pcsx2_0.9.7]/trunk/3rdparty/w32pthreads/pthread_mutex_trylock.c
ViewVC logotype

Annotation of /trunk/3rdparty/w32pthreads/pthread_mutex_trylock.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10 - (hide annotations) (download)
Mon Sep 6 11:40:06 2010 UTC (9 years, 9 months ago) by william
File MIME type: text/plain
File size: 2742 byte(s)
exported r3113 from ./upstream/trunk
1 william 10 /*
2     * pthread_mutex_trylock.c
3     *
4     * Description:
5     * This translation unit implements mutual exclusion (mutex) primitives.
6     *
7     * --------------------------------------------------------------------------
8     *
9     * Pthreads-win32 - POSIX Threads Library for Win32
10     * Copyright(C) 1998 John E. Bossom
11     * Copyright(C) 1999,2005 Pthreads-win32 contributors
12     *
13     * Contact Email: rpj@callisto.canberra.edu.au
14     *
15     * The current list of contributors is contained
16     * in the file CONTRIBUTORS included with the source
17     * code distribution. The list can also be seen at the
18     * following World Wide Web location:
19     * http://sources.redhat.com/pthreads-win32/contributors.html
20     *
21     * This library is free software; you can redistribute it and/or
22     * modify it under the terms of the GNU Lesser General Public
23     * License as published by the Free Software Foundation; either
24     * version 2 of the License, or (at your option) any later version.
25     *
26     * This library is distributed in the hope that it will be useful,
27     * but WITHOUT ANY WARRANTY; without even the implied warranty of
28     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
29     * Lesser General Public License for more details.
30     *
31     * You should have received a copy of the GNU Lesser General Public
32     * License along with this library in the file COPYING.LIB;
33     * if not, write to the Free Software Foundation, Inc.,
34     * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
35     */
36    
37     #include "ptw32pch.h"
38    
39    
40     INLINE int
41     pthread_mutex_trylock (pthread_mutex_t * mutex)
42     {
43     int result = 0;
44     pthread_mutex_t mx;
45    
46     /*
47     * Let the system deal with invalid pointers.
48     */
49    
50     /*
51     * We do a quick check to see if we need to do more work
52     * to initialise a static mutex. We check
53     * again inside the guarded section of ptw32_mutex_check_need_init()
54     * to avoid race conditions.
55     */
56     if (ptw32_static_mutex_enable && (*mutex >= PTHREAD_ERRORCHECK_MUTEX_INITIALIZER))
57     {
58     if ((result = ptw32_mutex_check_need_init (mutex)) != 0)
59     {
60     return (result);
61     }
62     }
63    
64     mx = *mutex;
65    
66     if (0 == (LONG) PTW32_INTERLOCKED_COMPARE_EXCHANGE (
67     (PTW32_INTERLOCKED_LPLONG) &mx->lock_idx,
68     (PTW32_INTERLOCKED_LONG) 1,
69     (PTW32_INTERLOCKED_LONG) 0))
70     {
71     if (mx->kind != PTHREAD_MUTEX_NORMAL)
72     {
73     mx->recursive_count = 1;
74     mx->ownerThread = pthread_self ();
75     }
76     }
77     else
78     {
79     if (mx->kind == PTHREAD_MUTEX_RECURSIVE &&
80     pthread_equal (mx->ownerThread, pthread_self ()))
81     {
82     mx->recursive_count++;
83     }
84     else
85     {
86     result = EBUSY;
87     }
88     }
89    
90     return (result);
91     }

  ViewVC Help
Powered by ViewVC 1.1.22