Uploaded image for project: 'JGroups'
  1. JGroups
  2. JGRP-1961

TCP_NIO2: message bundling can lead to corruption of msgs sent asynchronously

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Critical Critical
    • 3.6.6
    • 3.6.5
    • None

      When a message is sent with a message bundler (in TP), the output buffer in TP.BaseBundler is reused for all messages of a given bundle (say m1 and m2).
      This works for TCP and UDP because a write blocks and - when it returns - we're guaranteed that the buffer has been copied into an OS buffer (TCP's send window).
      However, this is different with TCP_NIO2: an async write always returns immediately, irrespective of whether the data was written completely, partially, or not at all !
      If a write only writes a part of its data, on returning from the write, the message bundler reuses the output buffer and can thus overwrite and corrupt buffers that are in transit, waiting to be written.
      A quick check where buffers were copied fixed the problem.
      TODO: see where we need to copy data when using a bundler. Possibly only copy if a write didn't write all of the data.

              rhn-engineering-bban Bela Ban
              rhn-engineering-bban Bela Ban
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: