summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--courses.go7
-rw-r--r--wsc.go12
-rw-r--r--wsp.go12
3 files changed, 12 insertions, 19 deletions
diff --git a/courses.go b/courses.go
index ccb5313..45e6fd9 100644
--- a/courses.go
+++ b/courses.go
@@ -53,8 +53,7 @@ type courseT struct {
Group courseGroupT
Teacher string
Location string
- Usems map[string](*usemT)
- UsemsLock sync.RWMutex
+ Usems sync.Map /* string, *usemT */
}
const (
@@ -145,9 +144,7 @@ func setupCourses() error {
}
break
}
- currentCourse := courseT{
- Usems: make(map[string]*usemT),
- } //exhaustruct:ignore
+ currentCourse := courseT{} //exhaustruct:ignore
err = rows.Scan(
&currentCourse.ID,
&currentCourse.Max,
diff --git a/wsc.go b/wsc.go
index 4142512..ffcb6da 100644
--- a/wsc.go
+++ b/wsc.go
@@ -93,11 +93,7 @@ func handleConn(
for courseID, course := range courses {
usem := &usemT{} //exhaustruct:ignore
usem.init()
- func() {
- course.UsemsLock.Lock()
- defer course.UsemsLock.Unlock()
- course.Usems[userID] = usem
- }()
+ course.Usems.Store(userID, usem)
usems[courseID] = usem
}
}()
@@ -105,11 +101,7 @@ func handleConn(
coursesLock.RLock()
defer coursesLock.RUnlock()
for _, course := range courses {
- func() {
- course.UsemsLock.Lock()
- defer course.UsemsLock.Unlock()
- delete(course.Usems, userID)
- }()
+ course.Usems.Delete(userID)
}
atomic.AddInt64(&usemCount, -int64(len(courses)))
}()
diff --git a/wsp.go b/wsp.go
index 1c30d4a..125608b 100644
--- a/wsp.go
+++ b/wsp.go
@@ -82,11 +82,15 @@ func makeReportError(ctx context.Context, conn *websocket.Conn) reportErrorT {
func propagateSelectedUpdate(courseID int) {
course := courses[courseID]
- course.UsemsLock.RLock()
- defer course.UsemsLock.RUnlock()
- for _, usem := range course.Usems {
+ course.Usems.Range(func(key, value interface{}) bool {
+ _ = key
+ usem, ok := value.(*usemT)
+ if !ok {
+ panic("Usems contains non-\"*usemT\" value")
+ }
usem.set()
- }
+ return true
+ })
}
func sendSelectedUpdate(