Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions slac_timing/bsa_buffer.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ def _configure(self) -> None:
def release(self) -> None:
self._require_reserved("release")
self.pvs.free.put(1)
self._disconnect_pvs()

# --- Acquisition ---

Expand Down
8 changes: 8 additions & 0 deletions slac_timing/buffer.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import gc
import time as _time
from abc import ABC, abstractmethod
from typing import Optional
Expand Down Expand Up @@ -67,6 +68,13 @@ def release(self) -> None:
"""Release the buffer back to the system."""
...

def _disconnect_pvs(self) -> None:
"""Disconnect all PV connections held by this buffer."""
if self._pvs is not None:
self._pvs.disconnect()
self._pvs = None
gc.collect() # Force garbage collection to clean up PVs

def is_reserved(self) -> bool:
return self.number is not None and self.number != 0

Expand Down
1 change: 1 addition & 0 deletions slac_timing/event_definition.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ def _configure(self) -> None:
def release(self) -> None:
self._require_reserved("release")
self.pvs.free.put(1)
self._disconnect_pvs()

# --- Acquisition ---

Expand Down
12 changes: 12 additions & 0 deletions slac_timing/pvs.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ def get_many(self, **kwargs) -> list:
"""Batch-read all PVs in this group via epics.caget_many."""
return epics.caget_many(self.pvnames, **kwargs)

def disconnect(self):
for pv in self._pvs.values():
pv.disconnect()
self._pvs.clear()


# --- System PV Containers (reservation protocol) ---

Expand Down Expand Up @@ -77,6 +82,13 @@ def __init__(self, prefix: str):
self.free = LazyPV(f"{prefix}:FREE")
self.cnt = LazyPV(f"{prefix}:CNT")

def disconnect(self):
for attr in vars(self).values():
if isinstance(attr, LazyPV):
attr.disconnect()
elif isinstance(attr, IndexedPVGroup):
attr.disconnect()


class BSABufferPVs(BufferPVs):
"""PVs specific to SC linac BSA buffers."""
Expand Down
Loading