Hi there,
first of all, let me say that - especially in the light of this thread,
I support Mario's change (removal of this one line from the constructor)
for the following reasons:
- It should not be necessary as you say, this field should always be
initialized before use by validatePipe().
- If it's not, it's most likely a bug.
- Therefore this line is only good for hiding bugs.
One thing is not quite clear to me:
- A race condition where thread A is validating the pipeline and
installs the pipeline objects but hasn't yet reached the code to install
the loops while thread B starts rendering using that SG2D thus invoking
an operation on a partially initialized pipeline - in this case the NPE
is appropriate and allowed since we don't support multi-threaded use of
the Graphics2D objects.
I was always under the assumption, that Java2D should be thread safe.
And in many places we make sure it is, e.g. in the SurfaceData objects.
But now you say, it isn't. So what is the real thing about Java2D and
thread safety. Is it only supposed to be thread safe when each thread
gets its own Graphics2D object? I think I remember back in the GNU
Classpath days we had a test case that shared a Graphics (no Graphics2D
back then..) object between threads and was supposed to be ok, but I
might be wrong here... Can you enlighten me what is the situation w/
Java2D and thread safety?
/ Roman