Integrated: 8321176: [Screencast] make a second attempt on screencast failure

Anton Bobrov duke at openjdk.org
Mon Dec 11 08:32:27 UTC 2023


On Tue, 5 Dec 2023 16:48:55 GMT, Anton Bobrov <duke at openjdk.org> wrote:

> This patch adds re-try logic to libpipewire screencast error handling as discussed in PR #16794 and also brings some additional error handling and thread safety improvements. Specifically around cleanup order where incorrect ordering lead to native memory corruption issues, and lock/unlock accounting that while mostly harmless (with the current libpipewire implementation) did pollute the stderr on jtreg tests, making some tests (expecting clean stderr) to fail.
> 
> The real major change here however is the throw of the RuntimeException which can propagate to public 
> 
> java.awt.Robot. createMultiResolutionScreenCapture, createScreenCapture, getPixelColor methods. I'm not sure the plain RuntimeException is the way to go here so this is just a placeholder of sorts. A separate/specific runtime exception can be created for this BUT *something* needs to be done here as the current implementation fails to convey libpipewire failures to those public API callers and since they have no way of detecting such errors otherwise they have no way of knowing that the data returned by those API is in fact invalid (eg black screens etc). The reason for using an unchecked exception here is driven mainly by the following factors:
> 
> 1) Since those are public API, their contracts can potentially make it difficult to introduce specific additional checked exceptions or return values (as appropriate) as those could potentially break existing API use.
> 
> 2) The libpipewire errors of that kind are rare and usually indicate there is something wrong with the desktop stack eg some fatal configuration or run time error that is normally not supposed to happen and given this patch now goes extra step re-trying on such failures it stands to reason runtime unchecked exception makes sense when that fails as well.
> 
> 3) Creating checked exceptions for such specific native implementation dependent errors and propagating such exceptions thru the call tree does not make much sense as most public API users won't even know how to handle them without knowing native implementation specifics.

This pull request has now been integrated.

Changeset: 92fd490f
Author:    Anton Bobrov <antbob at users.noreply.github.com>
Committer: Alexander Zvegintsev <azvegint at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/92fd490f22f690ff7698182658363b7035bcc3bf
Stats:     76 lines in 2 files changed: 52 ins; 16 del; 8 mod

8321176: [Screencast] make a second attempt on screencast failure

Reviewed-by: azvegint, prr

-------------

PR: https://git.openjdk.org/jdk/pull/16978


More information about the client-libs-dev mailing list