basket.go 720 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package main
  2. import (
  3. "fmt"
  4. "time"
  5. "golang-fave/engine/basket"
  6. )
  7. func basket_clean_do(sb *basket.Basket, stop chan bool) {
  8. sb.Cleanup()
  9. }
  10. func basket_clean_start(sb *basket.Basket) (chan bool, chan bool) {
  11. ch := make(chan bool)
  12. stop := make(chan bool)
  13. go func() {
  14. for {
  15. select {
  16. case <-time.After(30 * time.Minute):
  17. // Cleanup every 30 minutes
  18. basket_clean_do(sb, stop)
  19. case <-ch:
  20. ch <- true
  21. return
  22. }
  23. }
  24. }()
  25. return ch, stop
  26. }
  27. func basket_clean_stop(ch, stop chan bool) {
  28. for {
  29. select {
  30. case stop <- true:
  31. case ch <- true:
  32. <-ch
  33. return
  34. case <-time.After(3 * time.Second):
  35. fmt.Println("Basket error: force exit by timeout after 3 seconds")
  36. return
  37. }
  38. }
  39. }