lemonbar: Breakout condition logic to Shelf class

This commit is contained in:
kuben
2020-01-06 23:01:52 +01:00
committed by Jakub Fojt
parent 3ad338dbe4
commit a57aa206aa
3 changed files with 36 additions and 24 deletions

View File

@@ -1,3 +1,4 @@
import threading
import subprocess, os
import re # regexp
from enum import Enum
@@ -48,3 +49,28 @@ def create_new_fifo(fifo_file):
logger.error('''Failed, couldn't create fifo file''')
os.remove(config.pid_file) # Clean up own PID file
sys.exit(0)
class Shelf():
# A one-slot queue implemented with locks and condition objects
def __init__(self, item = None):
self.lock = threading.Lock()
self.item_ready = threading.Condition(self.lock)
self.item = item
def get(self):
# Consumes item
self.item_ready.acquire()
if self.item is None:
# Wait until becomes ready
self.item_ready.wait()
ret = self.item
self.item = None
self.item_ready.release()
return ret
def put(self, item):
# Discards previous item
self.item_ready.acquire()
self.item = item
self.item_ready.notify()
self.item_ready.release()