15 |
#include <assert.h> |
#include <assert.h> |
16 |
#include <sys/ioctl.h> |
#include <sys/ioctl.h> |
17 |
#include <stdio.h> |
#include <stdio.h> |
18 |
|
#include "../common/Mutex.h" |
19 |
|
|
20 |
|
using namespace LinuxSampler; |
21 |
|
|
22 |
/////////////////////////////////////////////////////////////////////////// |
/////////////////////////////////////////////////////////////////////////// |
23 |
// class 'TerminalSetting' |
// class 'TerminalSetting' |
24 |
|
|
25 |
|
static Mutex g_mutexReferences; |
26 |
static std::map<void*,int> g_terminalSettingReferences; |
static std::map<void*,int> g_terminalSettingReferences; |
27 |
|
|
28 |
static termios* _newTermios() { |
static termios* _newTermios() { |
29 |
termios* p = new termios; |
termios* p = new termios; |
30 |
|
LockGuard lock(g_mutexReferences); |
31 |
g_terminalSettingReferences[p] = 1; |
g_terminalSettingReferences[p] = 1; |
32 |
return p; |
return p; |
33 |
} |
} |
34 |
|
|
35 |
static void _releaseTermiosRef(void* p) { |
static void _releaseTermiosRef(void* p) { |
36 |
if (!p) return; |
if (!p) return; |
37 |
|
LockGuard lock(g_mutexReferences); |
38 |
std::map<void*,int>::iterator it = g_terminalSettingReferences.find(p); |
std::map<void*,int>::iterator it = g_terminalSettingReferences.find(p); |
39 |
assert(it != g_terminalSettingReferences.end()); |
assert(it != g_terminalSettingReferences.end()); |
40 |
assert(it->second > 0); |
assert(it->second > 0); |
47 |
|
|
48 |
static termios* _bumpTermiosRef(void* p) { |
static termios* _bumpTermiosRef(void* p) { |
49 |
if (!p) return NULL; |
if (!p) return NULL; |
50 |
|
LockGuard lock(g_mutexReferences); |
51 |
std::map<void*,int>::iterator it = g_terminalSettingReferences.find(p); |
std::map<void*,int>::iterator it = g_terminalSettingReferences.find(p); |
52 |
assert(it != g_terminalSettingReferences.end()); |
assert(it != g_terminalSettingReferences.end()); |
53 |
assert(it->second > 0); |
assert(it->second > 0); |