package main

import (
	"log"
	"sync"
)

func startBackgroundRoutine(name string, workfn func(<-chan struct{})) func() {
	log.Printf("Starting %s routine", name)
	closechan := make(chan struct{}, 1)
	var wg sync.WaitGroup
	wg.Add(1)
	go func() {
		workfn(closechan)
		wg.Done()
	}()
	return func() {
		log.Printf("Shutting down %s routine", name)
		closechan <- struct{}{}
		log.Printf("Waiting for routine %s to exit", name)
		wg.Wait()
		log.Printf("Routine %s done", name)
	}
}