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

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

    XMLWordPrintable

Details

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

    Description

      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.

      Attachments

        Activity

          People

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

            Dates

              Created:
              Updated:
              Resolved: