1 // -*- C++ -*- 2 // 3 // Copyright (C) 2012-2013, Vaclav Zeman. All rights reserved. 4 // 5 // Redistribution and use in source and binary forms, with or without modifica- 6 // tion, are permitted provided that the following conditions are met: 7 // 8 // 1. Redistributions of source code must retain the above copyright notice, 9 // this list of conditions and the following disclaimer. 10 // 11 // 2. Redistributions in binary form must reproduce the above copyright notice, 12 // this list of conditions and the following disclaimer in the documentation 13 // and/or other materials provided with the distribution. 14 // 15 // THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, 16 // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 17 // FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 18 // APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 19 // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- 20 // DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 21 // OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 22 // ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 26 #if ! defined (LOG4CPLUS_HELPERS_LOCKFILE_H) 27 #define LOG4CPLUS_HELPERS_LOCKFILE_H 28 29 #include <log4cplus/config.hxx> 30 31 #if defined (LOG4CPLUS_HAVE_PRAGMA_ONCE) 32 #pragma once 33 #endif 34 35 #include <log4cplus/tstring.h> 36 #include <log4cplus/thread/syncprims.h> 37 38 39 namespace log4cplus { namespace helpers { 40 41 42 class LOG4CPLUS_EXPORT LockFile 43 { 44 public: 45 LockFile (tstring const & lock_file); 46 ~LockFile (); 47 48 void lock () const; 49 void unlock () const; 50 51 private: 52 void open (int) const; 53 void close () const; 54 55 struct Impl; 56 57 tstring lock_file_name; 58 Impl * data; 59 }; 60 61 62 typedef log4cplus::thread::SyncGuard<LockFile> LockFileGuard; 63 64 65 } } // namespace log4cplus { namespace helpers { 66 67 68 #endif // LOG4CPLUS_HELPERS_LOCKFILE_H 69