[DynInst_API:] [dyninst/dyninst] 67fce2: Revisit locking for parallel parsing


Date: Mon, 11 Jun 2018 18:13:34 -0700
From: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
Subject: [DynInst_API:] [dyninst/dyninst] 67fce2: Revisit locking for parallel parsing
  Branch: refs/heads/new-parallel-parsing
  Home:   https://github.com/dyninst/dyninst
  Commit: 67fce2e5d95c1e999e94e82765a334eaab6ef4a2
      https://github.com/dyninst/dyninst/commit/67fce2e5d95c1e999e94e82765a334eaab6ef4a2
  Author: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
  Date:   2018-06-11 (Mon, 11 Jun 2018)

  Changed paths:
    M parseAPI/src/CFGModifier.C
    M parseAPI/src/CodeObject.C
    M parseAPI/src/ParseData.C
    M parseAPI/src/ParseData.h
    M parseAPI/src/Parser.C
    M parseAPI/src/ParserDetails.C
    M parseAPI/src/SymtabCodeSource.C

  Log Message:
  -----------
  Revisit locking for parallel parsing

1. We sometimes need to check whether a frame exists or not, and only
create a new frame when it does not exist. The lookup and the creation
should be one atomic operation. Parser::createAndRecordFrame implements
this atomic operation.
2. Similarly, Parser::createAndRecordFunc atomically creates a function
when it does not exist.
3. record_block is should require locking because multiple threads may
parse the same address.
4. The parse of a frame and the post-processing of a frame should be one
atomic operation. Right now, we use a scoped lock for this.
5. We should first initialize a frame before updating the frame status
or record the frame. Updating frame status or recording frame make the
frame available to other threads.


  Commit: 902261cef12a7c21b0b1936b7bf824384e9442e3
      https://github.com/dyninst/dyninst/commit/902261cef12a7c21b0b1936b7bf824384e9442e3
  Author: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
  Date:   2018-06-11 (Mon, 11 Jun 2018)

  Changed paths:
    M parseAPI/src/Parser.C
    M parseAPI/src/Parser.h

  Log Message:
  -----------
  We should not need finalize_block as the block should have been splited
during parsing.

Also delete some unnecessary code


  Commit: 49a4f51e6ab03d2473392074f3f60e51e06cde0f
      https://github.com/dyninst/dyninst/commit/49a4f51e6ab03d2473392074f3f60e51e06cde0f
  Author: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
  Date:   2018-06-11 (Mon, 11 Jun 2018)

  Changed paths:
    M parseAPI/src/Parser.C

  Log Message:
  -----------
  When updating block ends, also need to update block range lookups


  Commit: eb0953387dde0c0514d4b3b0d0a5e2181a000836
      https://github.com/dyninst/dyninst/commit/eb0953387dde0c0514d4b3b0d0a5e2181a000836
  Author: Xiaozhu Meng <xmeng@xxxxxxxxxxx>
  Date:   2018-06-11 (Mon, 11 Jun 2018)

  Changed paths:
    M parseAPI/src/ParseData.h
    M parseAPI/src/Parser.C

  Log Message:
  -----------
  Refactor ParseFrame::leadersToBlock from a hash map to a std::map so
that when we try to find a block that may contains an address, we do not
need to iterate every iten in the map. Instead, we can just use
upper_bound or lower_bound to find the only candidate


Compare: https://github.com/dyninst/dyninst/compare/d62e3491ac54...eb0953387dde
      **NOTE:** This service been marked for deprecation: https://developer.github.com/changes/2018-04-25-github-services-deprecation/

      Functionality will be removed from GitHub.com on January 31st, 2019.
[← Prev in Thread] Current Thread [Next in Thread→]
  • [DynInst_API:] [dyninst/dyninst] 67fce2: Revisit locking for parallel parsing, Xiaozhu Meng <=