From 227ab998bc0ca3c76656fe1cb2ffa308ad18e548 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Fri, 10 May 2024 16:34:10 +0200
Subject: [PATCH] lib/nfs/Connection: pass status and data to the
 NfsClientError ctor

This way, we avoid calling the FormatNfsClientError() which crashes
when nfs_get_error() returns nullptr; that can happen on RPC errors:
then, libnfs's check_nfs4_error() doesn't call nfs_set_error().

Closes https://github.com/MusicPlayerDaemon/MPD/issues/2040
---
 src/lib/nfs/Connection.cxx | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/lib/nfs/Connection.cxx b/src/lib/nfs/Connection.cxx
index 5ef120bab..c07b545cb 100644
--- a/src/lib/nfs/Connection.cxx
+++ b/src/lib/nfs/Connection.cxx
@@ -529,7 +529,7 @@ NfsConnection::OnSocketReady(unsigned flags) noexcept
 
 inline void
 NfsConnection::MountCallback(int status, [[maybe_unused]] nfs_context *nfs,
-			     [[maybe_unused]] void *data) noexcept
+			     void *data) noexcept
 {
 	assert(GetEventLoop().IsInside());
 	assert(context == nfs);
@@ -541,7 +541,8 @@ NfsConnection::MountCallback(int status, [[maybe_unused]] nfs_context *nfs,
 	mount_timeout_event.Cancel();
 
 	if (status < 0) {
-		auto e = NfsClientError(context, "nfs_mount_async() failed");
+		auto e = NfsClientError(status, context, data,
+					"nfs_mount_async() failed");
 		postponed_mount_error = std::make_exception_ptr(e);
 		return;
 	}