kopia lustrzana https://github.com/cyoung/stratux
Initial commit of ADSBTower mutex protection (needs testing)
rodzic
47271df764
commit
f1521d6e25
|
@ -26,6 +26,7 @@ import (
|
|||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
|
@ -125,6 +126,7 @@ type ADSBTower struct {
|
|||
}
|
||||
|
||||
var ADSBTowers map[string]ADSBTower // Running list of all towers seen. (lat,lng) -> ADSBTower
|
||||
var ADSBTowerMutex *sync.Mutex
|
||||
|
||||
func constructFilenames() {
|
||||
var fileIndexNumber uint
|
||||
|
@ -493,7 +495,8 @@ func makeStratuxStatus() []byte {
|
|||
msg[26] = byte((v & 0xFF00) >> 8)
|
||||
msg[27] = byte(v & 0xFF)
|
||||
|
||||
// Number of ADS-B towers.
|
||||
// Number of ADS-B towers. Map structure is protected by ADSBTowerMutex.
|
||||
ADSBTowerMutex.Lock()
|
||||
num_towers := uint8(len(ADSBTowers))
|
||||
|
||||
msg[28] = byte(num_towers)
|
||||
|
@ -510,7 +513,7 @@ func makeStratuxStatus() []byte {
|
|||
msg = append(msg, tmp[1]) // Longitude.
|
||||
msg = append(msg, tmp[2]) // Longitude.
|
||||
}
|
||||
|
||||
ADSBTowerMutex.Unlock()
|
||||
return prepareMessage(msg)
|
||||
}
|
||||
|
||||
|
@ -628,6 +631,8 @@ func updateMessageStats() {
|
|||
ES_messages_last_minute := uint(0)
|
||||
products_last_minute := make(map[string]uint32)
|
||||
|
||||
ADSBTowerMutex.Lock()
|
||||
|
||||
// Clear out ADSBTowers stats.
|
||||
for t, tinf := range ADSBTowers {
|
||||
tinf.Messages_last_minute = 0
|
||||
|
@ -681,6 +686,7 @@ func updateMessageStats() {
|
|||
ADSBTowers[t] = tinf
|
||||
}
|
||||
|
||||
ADSBTowerMutex.Unlock()
|
||||
}
|
||||
|
||||
// Check if CPU temperature is valid. Assume <= 0 is invalid.
|
||||
|
@ -1262,6 +1268,7 @@ func main() {
|
|||
constructFilenames()
|
||||
|
||||
ADSBTowers = make(map[string]ADSBTower)
|
||||
ADSBTowerMutex = &sync.Mutex{}
|
||||
MsgLog = make([]msg, 0)
|
||||
|
||||
crcInit() // Initialize CRC16 table.
|
||||
|
|
|
@ -151,6 +151,8 @@ func handleSituationRequest(w http.ResponseWriter, r *http.Request) {
|
|||
func handleTowersRequest(w http.ResponseWriter, r *http.Request) {
|
||||
setNoCache(w)
|
||||
setJSONHeaders(w)
|
||||
|
||||
ADSBTowerMutex.Lock()
|
||||
towersJSON, err := json.Marshal(&ADSBTowers)
|
||||
if err != nil {
|
||||
log.Printf("Error sending tower JSON data: %s\n", err.Error())
|
||||
|
@ -158,6 +160,7 @@ func handleTowersRequest(w http.ResponseWriter, r *http.Request) {
|
|||
// for testing purposes, we can return a fixed reply
|
||||
// towersJSON = []byte(`{"(38.490880,-76.135554)":{"Lat":38.49087953567505,"Lng":-76.13555431365967,"Signal_strength_last_minute":100,"Signal_strength_max":67,"Messages_last_minute":1,"Messages_total":1059},"(38.978698,-76.309276)":{"Lat":38.97869825363159,"Lng":-76.30927562713623,"Signal_strength_last_minute":495,"Signal_strength_max":32,"Messages_last_minute":45,"Messages_total":83},"(39.179285,-76.668413)":{"Lat":39.17928457260132,"Lng":-76.66841268539429,"Signal_strength_last_minute":50,"Signal_strength_max":24,"Messages_last_minute":1,"Messages_total":16},"(39.666309,-74.315300)":{"Lat":39.66630935668945,"Lng":-74.31529998779297,"Signal_strength_last_minute":9884,"Signal_strength_max":35,"Messages_last_minute":4,"Messages_total":134}}`)
|
||||
fmt.Fprintf(w, "%s\n", towersJSON)
|
||||
ADSBTowerMutex.Unlock()
|
||||
}
|
||||
|
||||
// AJAX call - /getSatellites. Responds with all GNSS satellites that are being tracked, along with status information.
|
||||
|
|
Ładowanie…
Reference in New Issue