[f2fs] Allow multiple shutdown calls and fix UAF

Synchronize ComponentRunner::Shutdown to safely support multiple and
racing shutdown calls (e.g. Lifecycle.Stop and Admin.Shutdown). Queue
callbacks so that ManagedVfs::Shutdown runs once and all callers receive
the shutdown result.

Switch AdminService's shutdown requester to fit::function to tolerate
repeated shutdown invocations, and retain strong fbl::RefPtr references
in on_unbound handlers for AdminService and StartupService to eliminate
use-after-free risks while FIDL channels remain active.

Test: fx test f2fs-component-runner-test
Test: fx test f2fs-component-tests
Test: fx test f2fs-unittest
TAG: agy
CONV: 69fcc240-ebc8-4412-9773-735011240313
Change-Id: Ia5976fc2c861a6a7f4612a4f007d084e90c1a2da
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1797177
Reviewed-by: Rui Qi Sim <rqsim@google.com>
Commit-Queue: Aaron Drew <ripper@google.com>
6 files changed