00001 /* 00002 * Sun Public License Notice 00003 * 00004 * The contents of this file are subject to the Sun Public License 00005 * Version 1.0 (the "License"); you may not use this file except 00006 * in compliance with the License. A copy of the License is available 00007 * at http://www.sun.com/ 00008 * 00009 * The Original Code is the Java Profiler module. The Initial Developers 00010 * of the Original Code are Jan Stola, Pavel Vacha, Michal Pise, Petr Luner, 00011 * Lukas Petru and Marek Przeczek. 00012 * 00013 * Portions created by Jan Stola are Copyright (C) 2000-2001. 00014 * All Rights Reserved. 00015 * 00016 * Portions created by Pavel Vacha are Copyright (C) 2000-2001. 00017 * All Rights Reserved. 00018 * 00019 * Portions created by Michal Pise are Copyright (C) 2000-2001. 00020 * All Rights Reserved. 00021 * 00022 * Portions created by Petr Luner are Copyright (C) 2000-2001. 00023 * All Rights Reserved. 00024 * 00025 * Portions created by Lukas Petru are Copyright (C) 2000-2001. 00026 * All Rights Reserved. 00027 * 00028 * Portions created by Marek Przeczek are Copyright (C) 2000-2001. 00029 * All Rights Reserved. 00030 * 00031 * Contributors: Jan Stola, Pavel Vacha, Michal Pise, Petr Luner, 00032 * Lukas Petru and Marek Przeczek. 00033 */ 00034 00035 #include "../prof/lock.h" 00036 #include "../prof/prof.h" 00037 00038 Lock::Lock( const String& name, JVMPI_Interface* jvmpi) { 00039 00040 #ifdef USE_RAW_MONITORS 00041 if( !jvmpi) jvmpi = Prof::prof().jvmpiInterface; 00042 _rm = jvmpi->RawMonitorCreate( (char*)(const char*)name); 00043 #else 00044 #ifdef WIN32 00045 InitializeCriticalSection( &cs); 00046 #else 00047 pthread_mutex_init( &cs, NULL); 00048 #endif 00049 #endif 00050 } 00051 00052 Lock::~Lock() { 00053 00054 /* don't try to destroy the lock, someone else 00055 * (another thread) can be still using it; 00056 * the lock will be destroyed automatically 00057 * by system after JVM process finished 00058 * (or was killed) */ 00059 } 00060 00061 void Lock::wait() { 00062 00063 #ifdef USE_RAW_MONITORS 00064 Prof::prof().jvmpiInterface->RawMonitorEnter( _rm); 00065 #else 00066 #ifdef WIN32 00067 EnterCriticalSection( &cs); 00068 #else 00069 pthread_mutex_lock( &cs); 00070 #endif 00071 #endif 00072 } 00073 00074 void Lock::release() { 00075 00076 #ifdef USE_RAW_MONITORS 00077 Prof::prof().jvmpiInterface->RawMonitorExit( _rm); 00078 #else 00079 #ifdef WIN32 00080 LeaveCriticalSection( &cs); 00081 #else 00082 pthread_mutex_unlock( &cs); 00083 #endif 00084 #endif 00085 }