lock cache during ROM move operation
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			This commit is contained in:
		
							
								
								
									
										22
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								main.go
									
									
									
									
									
								
							@@ -153,7 +153,9 @@ func moveBuildArtifacts(outDirectory, romDirectory string) bool {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		newROMs = true
 | 
							newROMs = true
 | 
				
			||||||
		log.Printf("new build found - moving file %s", v.Name())
 | 
							log.Printf("new build found - moving file %s", v.Name())
 | 
				
			||||||
 | 
							romCache.Lock() // lock to prevent multiple concurrent goroutines moving the same file
 | 
				
			||||||
		err := moveBuildFile(fmt.Sprintf("%s/%s", outDirectory, v.Name()), fmt.Sprintf("%s/%s", romDirectory, v.Name()))
 | 
							err := moveBuildFile(fmt.Sprintf("%s/%s", outDirectory, v.Name()), fmt.Sprintf("%s/%s", romDirectory, v.Name()))
 | 
				
			||||||
 | 
							romCache.Unlock()
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			log.Printf("failed to move file '%s' from out to rom directory: %v", v.Name(), err)
 | 
								log.Printf("failed to move file '%s' from out to rom directory: %v", v.Name(), err)
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
@@ -182,11 +184,16 @@ func isLineageROMZip(v fs.DirEntry) (bool, []string) {
 | 
				
			|||||||
// http - GET /
 | 
					// http - GET /
 | 
				
			||||||
// Writes JSON response for the updater app to know what versions are available to download
 | 
					// Writes JSON response for the updater app to know what versions are available to download
 | 
				
			||||||
func lineageOSROMListHandler(w http.ResponseWriter, r *http.Request) {
 | 
					func lineageOSROMListHandler(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
	romCache.Lock()
 | 
						go func() {
 | 
				
			||||||
	lineageOSROMs := romCache.ROMs
 | 
							newBuilds := moveBuildArtifacts("out", "public")
 | 
				
			||||||
	romCache.Unlock()
 | 
							if newBuilds {
 | 
				
			||||||
 | 
								updateROMCache("public")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	httpResponseJSON := &HTTPResponseJSON{Response: lineageOSROMs}
 | 
						romCache.Lock()
 | 
				
			||||||
 | 
						httpResponseJSON := &HTTPResponseJSON{Response: romCache.ROMs}
 | 
				
			||||||
 | 
						romCache.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	b, err := json.Marshal(httpResponseJSON)
 | 
						b, err := json.Marshal(httpResponseJSON)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -196,13 +203,6 @@ func lineageOSROMListHandler(w http.ResponseWriter, r *http.Request) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	w.Write(b)
 | 
						w.Write(b)
 | 
				
			||||||
 | 
					 | 
				
			||||||
	go func() {
 | 
					 | 
				
			||||||
		newBuilds := moveBuildArtifacts("out", "public")
 | 
					 | 
				
			||||||
		if newBuilds {
 | 
					 | 
				
			||||||
			updateROMCache("public")
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}()
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Returns a sha256 hash of a file located at the path provided
 | 
					// Returns a sha256 hash of a file located at the path provided
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user