diff --git a/src/syndicate/actors.nim b/src/syndicate/actors.nim index 40e2d88..c3ff04f 100644 --- a/src/syndicate/actors.nim +++ b/src/syndicate/actors.nim @@ -685,3 +685,23 @@ proc run* = except CatchableError as err: stderr.writeLine "ioqueue continuation threw an error" raise err + +type FacetGuard* = object + facet: Facet + +proc initGuard*(f: Facet): FacetGuard = + result.facet = f + inc result.facet.inertCheckPreventers + +proc disarm*(g: var FacetGuard) = + if not g.facet.isNil: + assert g.facet.inertCheckPreventers > 0 + dec g.facet.inertCheckPreventers + g.facet = nil + +proc `=destroy`*(g: var FacetGuard) = + disarm(g) + +proc `=copy`*(dst: var FacetGuard, src: FacetGuard) = + dst.facet = src.facet + inc dst.facet.inertCheckPreventers