diff --git a/src/common/restricted_token.c b/src/common/restricted_token.c
index 74ba7192a1..15ba86d1a8 100644
--- a/src/common/restricted_token.c
+++ b/src/common/restricted_token.c
@@ -76,6 +76,7 @@ CreateRestrictedProcess(char *cmd, PROCESS_INFORMATION *processInfo)
 	if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &origToken))
 	{
 		pg_log_error("could not open process token: error code %lu", GetLastError());
+		FreeLibrary(Advapi32Handle);
 		return 0;
 	}
 
@@ -89,6 +90,8 @@ CreateRestrictedProcess(char *cmd, PROCESS_INFORMATION *processInfo)
 								  0, &dropSids[1].Sid))
 	{
 		pg_log_error("could not allocate SIDs: error code %lu", GetLastError());
+		CloseHandle(origToken);
+		FreeLibrary(Advapi32Handle);
 		return 0;
 	}
 
@@ -187,6 +190,7 @@ get_restricted_token(void)
 			}
 			exit(x);
 		}
+		free(cmdline);
 	}
 #endif
 }