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 "../commun3/sharedMemory.h" 00036 #include "../setup/setup.h" 00037 00038 SharedMemory::SharedMemory( const String& name, int size) : 00039 00040 _size( size) { 00041 00042 #ifdef WIN32 00043 _shmid = CreateFileMapping( INVALID_HANDLE_VALUE, NULL, 00044 PAGE_READWRITE | SEC_COMMIT, 0, _size, name); 00045 _address = MapViewOfFile( _shmid, FILE_MAP_ALL_ACCESS, 0, 0, 0); 00046 #else 00047 _size = Setup::COMMUN_SHMEM_SIZE; 00048 _shmid = shmget( *(key_t*)(const char*)name, _size, 0666 | IPC_CREAT); 00049 _address = shmat( _shmid, NULL, 0666); 00050 #endif 00051 } 00052 00053 SharedMemory::~SharedMemory() { 00054 00055 #ifdef WIN32 00056 UnmapViewOfFile( _address); 00057 CloseHandle( _shmid); 00058 #else 00059 /* only detach, don't destroy, another process 00060 * can be still using it ! shared memory block will 00061 * stay in system memory forever (til next start 00062 * of profiling or reboot) */ 00063 00064 shmdt( _address); 00065 #endif 00066 }