Reference: PLT Scheme

1`` | Language Model
2`` | Syntactic Forms
3`` | Datatypes
4`` | Structures
5`` | Classes and Objects
6`` | Units
7`` | Contracts
8`` | Pattern Matching
9`` | Control Flow
10`` | Concurrency
11`` | Macros
12`` | Input and Output
13`` | Reflection and Security
14`` | Operating System
15`` | Memory Management
16`` | Running PLT Scheme
| Bibliography
| Index

On this page:

custodian?
make-custodian
custodian-shutdown-all
current-custodian
custodian-managed-list
custodian-memory-accounting-available?
custodian-require-memory
custodian-limit-memory
make-custodian-box
custodian-box?
custodian-box-value

Version: 4.0.2
contents index
← prev up next →

#### 13.6`` Custodians

See Custodians for basic information on the PLT Scheme custodian model.

(custodian? v) → boolean?
v : any/c

Returns #t if v is a custodian value, #f otherwise.

(make-custodian [cust]) → custodian?
cust : custodian? = (current-custodian)

Creates a new custodian that is subordinate to cust. When cust is directed (via custodian-shutdown-all) to shut down all of its managed values, the new subordinate custodian is automatically directed to shut down its managed values as well.

(custodian-shutdown-all cust) → void?
cust : custodian?

Closes all open ports and closes all active TCP listeners and UDP sockets that are managed by cust. It also removes cust (and its subordinates) as managers of all threads; when a thread has no managers, it is killed (or suspended; see thread/suspend-to-kill) If the current thread is to be killed, all other shut-down actions take place before killing the thread.

(current-custodian) → custodian?
(current-custodian cust) → void?
cust : custodian?

A parameter that determines a custodian that assumes responsibility for newly created threads, ports, TCP listeners, UDP sockets, and byte converters.

(custodian-managed-list cust super) → list?
cust : custodian?
super : custodian?

Returns a list of immediately managed objects and subordinate custodians for cust, where cust is itself subordinate to super (directly or indirectly). If cust is not strictly subordinate to super, the exn:fail:contract exception is raised.

(custodian-memory-accounting-available?) → boolean?

Returns #t if MzScheme is compiled with support for per-custodian memory accounting, #f otherwise.

Memory accounting is normally available in PLT Scheme 3m, which is the main variant of PLT Scheme, and not normally available in PLT Scheme CGC.

(custodian-require-memory |  | limit-cust |  |  |  |
|  | need-amt |  |  |  |
|  | stop-cust) |  | → |  | void?

limit-cust : custodian?
need-amt : nonnegative-exact-integer?
stop-cust : custodian?

Registers a require check if PLT Scheme is compiled with support for per-custodian memory accounting, otherwise the exn:fail:unsupported exception is raised.

If a check is registered, and if PLT Scheme later reaches a state after garbage collection (see Garbage Collection) where allocating need-amt bytes charged to limit-cust would fail or tigger some shutdown, then stop-cust is shut down.

(custodian-limit-memory |  | limit-cust |  |  |  |
|  | limit-amt |  |  |  |
| [ | stop-cust]) |  | → |  | void?

limit-cust : custodian?
limit-amt : nonnegative-exact-integer?
stop-cust : custodian? = limit-cust

Registers a limit check if PLT Scheme is compiled with support for per-custodian memory accounting, otherwise the exn:fail:unsupported exception is raised.

If a check is registered, and if PLT Scheme later reaches a state after garbage collection (see Garbage Collection) where limit-cust owns more than limit-amt bytes, then stop-cust is shut down.

For reliable shutdown, limit-amt for custodian-limit-memory must be much lower than the total amount of memory available (minus the size of memory that is potentially used and not charged to limit-cust). Moreover, if indvidual allocations that are initially charged to limit-cust can be arbitrarily large, then stop-cust must be the same as limit-cust, so that excessively large immediate allocations can be rejected with an exn:fail:out-of-memory exception.

(make-custodian-box cust v) → custodian-box?
cust : custodian?
v : any/c

Returns a custodian box that contains v as long as cust has not been shut down.

(custodian-box? v) → boolean?
v : any/c

Returns #t if v is a custodian box produced by make-custodian-box, #f otherwise.

(custodian-box-value cb) → any
cb : custodian-box?

Rturns the value in the given custodian box, or #f if the value has been removed.

contents index
← prev up next →