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; }