genericopenlibs/openenvcore/libpthread/src/pthread_mutex_init.cpp
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/genericopenlibs/openenvcore/libpthread/src/pthread_mutex_init.cpp	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,65 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Name        : pthread_mutex_init.cpp
+// Part of     : pthread
+// Interface   : POSIX, pthread
+// POSIX implementation of mutexes on Symbian
+// Version     :
+//
+
+
+
+#include "mutextypes.h"
+
+extern int _mutexCreate (pthread_mutex_t * mutex, 
+                  const pthread_mutexattr_t* attr);
+EXPORT_C int pthread_mutex_init (pthread_mutex_t * mutex, 
+                                 const pthread_mutexattr_t* attr)
+{
+
+    pthread_mutexattr_t defaultattributes = 
+                           PTHREAD_MUTEX_ATTRIBUTE_DEFAULT_INITIALIZER;
+    if(!attr)
+    {
+        attr = &defaultattributes;
+    }
+
+	//coverity[var_compare_op]  
+    if( !mutex || !VALID_MUTEX_ATTR(attr) || mutex->iState == _EInitialized)
+    {
+        return EINVAL;
+    }
+  
+    //recursively call pthread_mutex_init under _InitOnce harness to 
+    //diambiguate race to create this mutex if this is a statically 
+    //intialiazied mutex ignore passed pthread_mutexattr_t attribute 
+    //in this case
+
+	//coverity[var_deref_op]
+  
+    if( (mutex->iState == _ENeedsNormalInit    || 
+         mutex->iState == _ENeedsRecursiveInit || 
+         mutex->iState == _ENeedsErrorCheckInit   )  && 
+         mutex->iReentry != 0xBABA)
+    { 
+        if( _InitOnce(mutex) )
+        {
+            return 0;
+        }
+    }
+    
+    return _mutexCreate(mutex,attr);
+}
+
+// End of File