
On Thu, Dec 14, 2023 at 12:18:27PM +0100, Peter Krempa wrote:
While I have no problems with virErrorPreserveLast() as that's just syntax sugar on top of existing public functions, I don't think that it's a good idea to expose virErrorRestore() as that gives the access to previously unexposed virSetError(). This gives the users possibility to set arbitrary errors due to the error struct being public as noted above.
This sounds very much like a "don't do that then" scenario.
Saving an error to a custom error object should be enough and I don't really see a point in making libvirt carry it around with the possibility of it being overwritten at any point by another library call.
I'm not very clear on your suggestion. If I can't restore the libvirt error in the error callback, how would the eventual API call return have the right error? Are you suggesting I have to have custom logic to save the error to some thread-local location, and change every single API call handling to look there, ignoring the API return value and error object? Or do you have a suggestion I'm missing that is more elegant than this? I think it's pretty illustrative that the library itself uses these calls everywhere. regards john