I am not sure where it is my misusage or a bug in beepcore.
Here is what we traced when piggyback is used.
Client:
StartChannelRequest with a piggybacked data
Server:
1. ProcessStartChannelRequest
2. detect the piggybacked MSG and put in the recvMSGQueue
of a new channel (say channel 1)
3. Channel 1 is invoked to process the piggybacked MSG
4. In PiggybackMSG.sendRPY, the reply data is given to
channel 0
5. Channel 0 send the piggybacked reply to client,
remove msg from
the head of recvMSGQueue of channle 0, while leaviing a
msg at the head of recvMSGQueue of channel 1
Next time, when client send another request, there are
two msgs in
the recvMSGQueue in channel 1, the channel 1 will not
process any
message at all, because the condition to process
message is
to check whether the size of recvMSGQueue is 1.
Logged In: YES
user_id=1051400
We have made changes to ChannelImpl.java and
PiggybackedMSG.java to avoid the problems we described above.