On Fri, Feb 1, 2019 at 4:50 PM Mark Thomas <[email protected]> wrote:
> On 01/02/2019 14:41, Rémy Maucherat wrote:
> > On Thu, Jan 31, 2019 at 8:09 PM Mark Thomas <[email protected]> wrote:
> >
> >> On 31/01/2019 16:31, Mark Thomas wrote:
> >>> On 31/01/2019 15:58, Rémy Maucherat wrote:
> >>>> On Wed, Jan 30, 2019 at 8:37 PM Mark Thomas <[email protected]> wrote:
>
>
> <snip/>
>
> >>>> I had four issues then that appear to be fixed (three fixes and one
> test
> >>>> gone, which was
> >>>> com.sun.ts.tests.websocket.ee
> >> .javax.websocket.handshakeresponse.getHeadersHasOriginTest).
> >>>> com/sun/ts/tests/websocket/ee/javax/websocket/session/setTimeout1Test
> >>>> doesn't pass for me at the moment, although you put in your wiki it is
> >>>> fixed.
> >>>
> >>> I'm not 100% sure on that. It might be intermittent. Once I'd been
> >>> through everything once, I was going to do a full run and see where
> >>> things stand.
> >>
> >> Got to the bottom of that one (and 2 others). It was related to how
> >> quickly we checked for session timeout. The default is every 10s which
> >> isn't fast enough for those tests. I've added a system property to
> >> reduce it to every second and that fixes them.
> >>
> >
> > Hum, right, I think I remember that one now. It was a while ago.
>
> Maybe not. Those two are failing consistently for me now.
>
Will have to look at it again then.
>
> >>
> >>> Having looked at some of the TCK tests I am more in favour of making
> >>> some of the changes I was previously opposed to. Again, I was planning
> >>> on coming back to this after I'd done a new full run.
> >>
> >> Starting the full run now...
> >>
> >> Assuming it takes as long to run as it did last time (~2 hours) I'll
> >> come back to this tomorrow.
> >>
> >
> > So it's all good sorted out now, except the concurrency problem. The spec
> > probably implied concurrency was "ok". Resolving this by waiting for the
> > right state works for me (unsurprisingly), I have a first patch.
>
> I was thinking along the same lines but I was worried about possible
> deadlocks.
>
Here's my patch anyway.
Index: java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
===================================================================
--- java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
(revision 1852757)
+++ java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
(working copy)
@@ -1159,32 +1159,32 @@
private State state = State.OPEN;
public synchronized void streamStart() {
- checkState(State.OPEN);
+ waitState(State.OPEN);
state = State.STREAM_WRITING;
}
public synchronized void writeStart() {
- checkState(State.OPEN);
+ waitState(State.OPEN);
state = State.WRITER_WRITING;
}
public synchronized void binaryPartialStart() {
- checkState(State.OPEN, State.BINARY_PARTIAL_READY);
+ waitState(State.OPEN, State.BINARY_PARTIAL_READY);
state = State.BINARY_PARTIAL_WRITING;
}
public synchronized void binaryStart() {
- checkState(State.OPEN);
+ waitState(State.OPEN);
state = State.BINARY_FULL_WRITING;
}
public synchronized void textPartialStart() {
- checkState(State.OPEN, State.TEXT_PARTIAL_READY);
+ waitState(State.OPEN, State.TEXT_PARTIAL_READY);
state = State.TEXT_PARTIAL_WRITING;
}
public synchronized void textStart() {
- checkState(State.OPEN);
+ waitState(State.OPEN);
state = State.TEXT_FULL_WRITING;
}
@@ -1213,6 +1213,23 @@
"BUG: This code should never be called");
}
}
+ notify();
+ }
+
+ private void waitState(State... required) {
+ while (true) {
+ for (State state : required) {
+ if (this.state == state) {
+ return;
+ }
+ }
+ try {
+ // TODO: timeout and break loop after a while
+ wait(1000);
+ } catch (InterruptedException e) {
+ // Ignore
+ }
+ }
}
private void checkState(State... required) {
>
> > Note: I cannot edit the confluence, what did I do wrong ?
>
> Nothing. You weren't granted edit privs. I've just fixed that.
>
Ah, I thought anyone could edit it.
Rémy
>
> Mark
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>