[kaffe] MediaTracker
Jim Pick
jim at kaffe.org
Thu May 30 11:55:27 PDT 2002
Okay, I applied it, but didn't test it.
Cheers,
- Jim
On Tue, 2002-05-28 at 06:18, Jukka Santala wrote:
> This will probably need some further testing. One class in X-Smiles passes
> a fake URL to MediaTracker in hopes that it'll fast-fail and just get
> ignored. Though we'll probably change that, in interest of compatibility I
> wrote a patch to make this work on Kaffe more or less as it seems on other
> JRE's. Problem is, it's not exactly well documented.
>
> It appears that with URL class the error occurs even before MediaTracker
> enters its wait() section, and hence it never catches the notify() -
> leading to "hangs" of several minutes or worse while Kaffe waits to time
> out. In this patch, flags are checked for ImageObserver.ERROR before
> entering wait(), and the synchronized section has been extended to
> encompass all of that to prevent race-conditions between the check and
> wait() on the assumption that with an URL the error could come in with
> some latency. For the latter reason, imageUpdate() has also been modified
> to fire notify() in this case.
>
> We probably SHOULD also check ABORT in the same manner, but since I
> couldn't immediately come up with a test-case to compare this against
> other JRE's, I didn't add that in yet.
>
> -Jukka Santala
> ----
>
> Index: libraries/javalib/java/awt/MediaTracker.java
> ===================================================================
> RCS file: /cvs/kaffe/kaffe/libraries/javalib/java/awt/MediaTracker.java,v
> retrieving revision 1.11
> diff -u -r1.11 MediaTracker.java
> --- libraries/javalib/java/awt/MediaTracker.java 12 Oct 1999 02:29:40 -0000 1.11
> +++ libraries/javalib/java/awt/MediaTracker.java 28 May 2002 13:10:41 -0000
> @@ -301,8 +301,8 @@
> return false;
> }
>
> - if ((e.img.checkImage(e.w, e.h, e, true) & (ImageObserver.FRAMEBITS|ImageObserver.ALLBITS)) == 0) {
> - synchronized ( e ) {
> + synchronized ( e ) {
> + if ((e.img.checkImage(e.w, e.h, e, true) & (ImageObserver.FRAMEBITS|ImageObserver.ALLBITS|ImageObserver.ERROR)) == 0) {
> e.wait( ms);
> }
> }
> @@ -337,7 +337,7 @@
> w = width;
> h = height;
> }
> - if ( (infoflags & (ALLBITS | FRAMEBITS | ABORT)) != 0 ) {
> + if ( (infoflags & (ALLBITS | FRAMEBITS | ABORT | ImageObserver.ERROR)) != 0 ) {
> notify();
> return (false);
> }
More information about the kaffe
mailing list