aboutsummaryrefslogtreecommitdiffstats
path: root/src/wireguard/router/mutex.rs
blob: aaf0b5e0a96d6166fddf26a6d6137967247b4d7e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
use std::sync::Mutex as StdMutex;
use std::sync::MutexGuard;

use std::sync::RwLock as StdRwLock;
use std::sync::RwLockReadGuard;
use std::sync::RwLockWriteGuard;

pub struct Mutex<T> {
    mutex: StdMutex<T>,
}

pub struct RwLock<T> {
    rwlock: StdRwLock<T>,
}

impl<T> Mutex<T> {
    pub fn new(v: T) -> Mutex<T> {
        Mutex {
            mutex: StdMutex::new(v),
        }
    }

    pub fn lock(&self) -> MutexGuard<T> {
        self.mutex.lock().unwrap()
    }
}

impl<T> RwLock<T> {
    pub fn new(v: T) -> RwLock<T> {
        RwLock {
            rwlock: StdRwLock::new(v),
        }
    }

    pub fn read(&self) -> RwLockReadGuard<T> {
        self.rwlock.read().unwrap()
    }

    pub fn write(&self) -> RwLockWriteGuard<T> {
        self.rwlock.write().unwrap()
    }
}
*/

use spin::Mutex as StdMutex;
use spin::MutexGuard;

use spin::RwLock as StdRwLock;
use spin::RwLockReadGuard;
use spin::RwLockWriteGuard;

pub struct Mutex<T> {
    mutex: StdMutex<T>,
}

pub struct RwLock<T> {
    rwlock: StdRwLock<T>,
}

impl<T> Mutex<T> {
    pub fn new(v: T) -> Mutex<T> {
        Mutex {
            mutex: StdMutex::new(v),
        }
    }

    pub fn lock(&self) -> MutexGuard<T> {
        self.mutex.lock()
    }

    pub fn try_lock(&self) -> Option<MutexGuard<T>> {
        self.mutex.try_lock()
    }
}

impl<T> RwLock<T> {
    pub fn new(v: T) -> RwLock<T> {
        RwLock {
            rwlock: StdRwLock::new(v),
        }
    }

    pub fn read(&self) -> RwLockReadGuard<T> {
        self.rwlock.read()
    }

    pub fn write(&self) -> RwLockWriteGuard<T> {
        self.rwlock.write()
    }
}