Hi hackers,
I'm working on a CSP and started wondering about the semantics of
ExecShutdownNode(). The documentation suggests that it can be used for
freeing resources early. Early meaning as soon as it's known that no
more rows need to be produced. For that, ExecutePlan() calls
ExecShutdownNode(), once all tuples got produced and no backscan is
possible.
However, reading through the code it seems to me that the function got
introduced for the purpose of being able to cleanup resources before the
DSM segment is removed. I cannot see how it could safely be used for
other purposes: ExecutePlan() calls ExecShutdownNode() even though
ExecutePlan() is possibly called again, e.g. when a cursor is used.
It looks like the existing code only works because parallelism is
disabled for all cases where ExecutePlan() might be invoked multiple
times (e.g. user cursors).
Can someone please shed some light on the intended use case? I'm
planning to conserve any learnings from this thread in src/executor/README.
--
David Geier