diff options
Diffstat (limited to '')
-rw-r--r-- | courses.go | 7 | ||||
-rw-r--r-- | wsc.go | 12 | ||||
-rw-r--r-- | wsp.go | 12 |
3 files changed, 12 insertions, 19 deletions
@@ -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( ¤tCourse.ID, ¤tCourse.Max, @@ -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))) }() @@ -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( |