Fix panic for concurrent streams map read and map write #1612

This commit is contained in:
Alex X
2025-02-24 21:02:33 +03:00
parent e55c2e9598
commit 90544ba713
5 changed files with 45 additions and 28 deletions
+4 -4
View File
@@ -112,7 +112,7 @@ func apiUnpair(id string) error {
return errors.New(api.StreamNotFound)
}
rawURL := findHomeKitURL(stream)
rawURL := findHomeKitURL(stream.Sources())
if rawURL == "" {
return errors.New("not homekit source")
}
@@ -128,10 +128,10 @@ func apiUnpair(id string) error {
func findHomeKitURLs() map[string]*url.URL {
urls := map[string]*url.URL{}
for id, stream := range streams.Streams() {
if rawURL := findHomeKitURL(stream); rawURL != "" {
for name, sources := range streams.GetAllSources() {
if rawURL := findHomeKitURL(sources); rawURL != "" {
if u, err := url.Parse(rawURL); err == nil {
urls[id] = u
urls[name] = u
}
}
}
+2 -3
View File
@@ -79,7 +79,7 @@ func Init() {
Handler: homekit.ServerHandler(srv),
}
if url := findHomeKitURL(stream); url != "" {
if url := findHomeKitURL(stream.Sources()); url != "" {
// 1. Act as transparent proxy for HomeKit camera
dial := func() (net.Conn, error) {
client, err := homekit.Dial(url, srtp.Server)
@@ -186,8 +186,7 @@ func hapPairVerify(w http.ResponseWriter, r *http.Request) {
}
}
func findHomeKitURL(stream *streams.Stream) string {
sources := stream.Sources()
func findHomeKitURL(sources []string) string {
if len(sources) == 0 {
return ""
}