summaryrefslogtreecommitdiff
path: root/callback.go
blob: 672a36e8636cbb9addd08c1c9a153a921b9cdcc8 (plain)
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
package pam

import "sync"

var cb struct {
	sync.Mutex
	m map[int]interface{}
	c int
}

func init() {
	cb.m = make(map[int]interface{})
}

func cbAdd(v interface{}) int {
	cb.Lock()
	defer cb.Unlock()
	cb.c++
	cb.m[cb.c] = v
	return cb.c
}

func cbGet(c int) interface{} {
	cb.Lock()
	defer cb.Unlock()
	if v, ok := cb.m[c]; ok {
		return v
	}
	panic("Callback pointer not found")
}

func cbDelete(c int) {
	cb.Lock()
	defer cb.Unlock()
	if _, ok := cb.m[c]; !ok {
		panic("Callback pointer not found")
	}
	delete(cb.m, c)
}