Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 3.2.x, 3.3.x, 3.2.10
    • Fix Version/s: 3.3.1
    • Component/s: core
    • Labels:
      None
    • Environment:
      Apache 2.0.55 mpm-worker

      Description

      There is at least one memory leak request.readline(). I'm currently auditing the code so there may well be others.

      I think the leak will only occur when the request body is incompletely read with readline, which is likely an unusual corner case. The following demostrates the leak:

      Consider a request body consisting of:

      '\n'.join([ 'a'*100 for i in xrange(0, 100) ])

      and using this handler:

      def handler(req):

      1. Handler reads 20 lines but request contains 100 lines.
      2. Since the body is not completely read, the buffer allocated
      3. in requestobject.c req_readline is never freed.
        req.content_type = 'text/plain'
        count = 0
        for i in range(0, 20):
        line = req.readline()
        count += 1

      req.write('ok readline_partial: %d lines read' % count)
      return apache.OK

      With this test setup I'm seeing a leak of approx 10k bytes per request.

        Attachments

          Activity

            People

            • Assignee:
              jgallacher Jim Gallacher
              Reporter:
              jgallacher Jim Gallacher
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: