
4 changed files with 80 additions and 14 deletions
@ -0,0 +1,41 @@ |
|||||
|
#include "fs_mutex.hh" |
||||
|
#include "../../../src/std_utils.hh" |
||||
|
#include<fstream> |
||||
|
|
||||
|
|
||||
|
namespace pEp { |
||||
|
namespace PityTest11 { |
||||
|
fs_mutex::fs_mutex(std::string mutexpath) : mutexpath{ mutexpath } {} |
||||
|
|
||||
|
void fs_mutex::aquire() const |
||||
|
{ |
||||
|
if (mutexpath.empty()) { |
||||
|
throw std::runtime_error("no mutexpath set"); |
||||
|
} else { |
||||
|
std::string mutex_file = mutexpath; |
||||
|
while (Utils::path_exists(mutex_file)) { |
||||
|
Utils::sleep_millis(5); |
||||
|
} |
||||
|
std::ofstream msgfile = Utils::file_create(mutexpath); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void fs_mutex::release() const |
||||
|
{ |
||||
|
if (mutexpath.empty()) { |
||||
|
throw std::runtime_error("no mutexpath set"); |
||||
|
} else { |
||||
|
|
||||
|
try { |
||||
|
Utils::path_delete(mutexpath); |
||||
|
// Give others a chance to pickup
|
||||
|
Utils::sleep_millis(100); |
||||
|
} catch (...) { |
||||
|
// pEpLogClass("Error releasing fsmutex");
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} // namespace PityTest
|
||||
|
} // namespace pEp
|
||||
|
|
@ -0,0 +1,25 @@ |
|||||
|
#ifndef FS_MUTEX |
||||
|
#define FS_MUTEX |
||||
|
|
||||
|
#include <iostream> |
||||
|
|
||||
|
namespace pEp { |
||||
|
namespace PityTest11 { |
||||
|
// a very primitive IPC sync method
|
||||
|
// also unreliable
|
||||
|
// but good enough for what i just needed it for
|
||||
|
class fs_mutex { |
||||
|
public: |
||||
|
fs_mutex() = delete; |
||||
|
fs_mutex(std::string mutexpath); |
||||
|
|
||||
|
void aquire() const; |
||||
|
void release() const; |
||||
|
|
||||
|
private: |
||||
|
const std::string mutexpath; |
||||
|
}; |
||||
|
} // namespace PityTest11
|
||||
|
} // namespace pEp
|
||||
|
|
||||
|
#endif // FS_MUTEX
|
Loading…
Reference in new issue