One ACCEPTED-but-not-yet-applied model/routing, mirrored down from the control layer so the status view can see it.
A POST that targets a still-warming model is accepted (202) and parked on the element's pending_reroutes list until the target is READY. The stream keeps serving its OLD model meanwhile, so without this mirror model/status shows no trace of the request at all – and a reconciler polling it cannot tell an in-flight route from one that was dropped.
It is a MIRROR, not a reference: the control structs it copies from are freed the moment their reroute applies or is abandoned, and the status probe runs on a different thread under a different lock (ib->lock, not api_control_lock). Deep copies under ib->lock keep the two lifetimes independent. The whole array is REPLACED wholesale on every change rather than patched entry by entry, so there is no add/remove bookkeeping to drift out of sync.
Deferred PROMOTES are deliberately not mirrored: a passthrough stream awaiting one already reports its target via prim.pending_model, and mirroring it too would report the same intent twice.
Definition at line 870 of file sources/gst-plugins/gst-nvmodelmux/gstnvmodelmux_priv.h.
Data Fields | |
| guint * | src |
| guint | n |
| in-scope source ids; NULL/n==0 => ALL streams More... | |
| gchar * | primary |
| gchar * | shadow |
| deferred primary target key, or NULL More... | |
| gboolean | clear_shadow |
| deferred shadow target key, or NULL More... | |
| gint | p_gpu |
| TRUE: the apply DROPS the shadow lane More... | |
| gint | s_gpu |
| requested placement per role (MM_GPU_ANY=any) More... | |
| gboolean | p_via_default |
| gboolean | s_via_default |
| origin the deferred apply will record More... | |
| gboolean ModelMuxPendingRouteNote::clear_shadow |
deferred shadow target key, or NULL
Definition at line 883 of file sources/gst-plugins/gst-nvmodelmux/gstnvmodelmux_priv.h.
| guint ModelMuxPendingRouteNote::n |
in-scope source ids; NULL/n==0 => ALL streams
Definition at line 873 of file sources/gst-plugins/gst-nvmodelmux/gstnvmodelmux_priv.h.
| gint ModelMuxPendingRouteNote::p_gpu |
TRUE: the apply DROPS the shadow lane
Definition at line 884 of file sources/gst-plugins/gst-nvmodelmux/gstnvmodelmux_priv.h.
| gboolean ModelMuxPendingRouteNote::p_via_default |
Definition at line 886 of file sources/gst-plugins/gst-nvmodelmux/gstnvmodelmux_priv.h.
| gchar * ModelMuxPendingRouteNote::primary |
Definition at line 874 of file sources/gst-plugins/gst-nvmodelmux/gstnvmodelmux_priv.h.
| gint ModelMuxPendingRouteNote::s_gpu |
requested placement per role (MM_GPU_ANY=any)
Definition at line 885 of file sources/gst-plugins/gst-nvmodelmux/gstnvmodelmux_priv.h.
| gboolean ModelMuxPendingRouteNote::s_via_default |
origin the deferred apply will record
Definition at line 887 of file sources/gst-plugins/gst-nvmodelmux/gstnvmodelmux_priv.h.
| gchar * ModelMuxPendingRouteNote::shadow |
deferred primary target key, or NULL
The shadow lane is TRI-state, and absence alone cannot carry it: shadow=NULL, clear_shadow=FALSE -> leave the shadow UNCHANGED shadow=<key> -> set it to that model shadow=NULL, clear_shadow=TRUE -> CLEAR it ("shadow": null in the POST) Collapsing the first and last would make "route the primary" and "route the primary AND drop the shadow" read identically while deferred – the reader could not predict whether an A/B pair survives the switch.
Definition at line 882 of file sources/gst-plugins/gst-nvmodelmux/gstnvmodelmux_priv.h.
| guint * ModelMuxPendingRouteNote::src |
Definition at line 872 of file sources/gst-plugins/gst-nvmodelmux/gstnvmodelmux_priv.h.