sm: make sure handles don't get clobbered on failure

This commit is contained in:
substanc3 2021-02-23 23:09:28 +01:00
parent cbf3ba9b75
commit 57ee3128b5

View file

@ -407,10 +407,16 @@ namespace ams::sm::impl {
ServiceInfo *free_service = GetFreeServiceInfo();
R_UNLESS(free_service != nullptr, sm::ResultOutOfServices());
/* Make sure we keep the handles clean */
auto handle_guard = SCOPE_GUARD { *out = INVALID_HANDLE; *(free_service->port_h.GetPointer()) = INVALID_HANDLE; };
/* Create the new service. */
*out = INVALID_HANDLE;
R_TRY(svcCreatePort(out, free_service->port_h.GetPointerAndClear(), max_sessions, is_light, free_service->name.name));
/* We succeeded! */
handle_guard.Cancel();
/* Save info. */
free_service->name = service;
free_service->owner_process_id = process_id;