)]}'
{
  "commit": "99c3fe52d237eae546d7de484d0cfbd615ac192c",
  "tree": "6ddaba97d85156d9e873fde679af8bd0e9043fcf",
  "parents": [
    "02d02fc7924992ddd98073b95810b957efdc421a"
  ],
  "author": {
    "name": "Vladimir Mezentsev",
    "email": "vladimir.mezentsev@oracle.com",
    "time": "Sat Mar 23 18:31:03 2024 -0700"
  },
  "committer": {
    "name": "Vladimir Mezentsev",
    "email": "vladimir.mezentsev@oracle.com",
    "time": "Mon Mar 25 16:29:41 2024 -0700"
  },
  "message": "gprofng: fix infinite recursion on calloc with multi-threaded applications\n\nlibcollector uses pthread_getspecific() and pthread_setspecific() to access\nthread local memory. libcollector uses this memory to check that\ninterposed functions (like malloc, calloc or free) don\u0027t have recursion.\nThe first time we call calloc(), we call pthread_setspecific() to create\na thread-specific value.\nOn Ubuntu machine, pthread_setspecific() calls calloc(), and we cannot intercept\nsuch recursion.\ngcc supports thread-local storage. For example,\n  static __thread int reentrance \u003d 0;\nI rewrote code using this instead of pthread_setspecific().\n\ngprofng/ChangeLog\n2024-03-23  Vladimir Mezentsev  \u003cvladimir.mezentsev@oracle.com\u003e\n\n\tPR gprofng/31460\n\t* libcollector/heaptrace.c: Use the __thread variable to check for\n\t* reentry. Clean up code.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "481a69bcb6b0daf05a5846ea8a1b3d2e894f456f",
      "old_mode": 33188,
      "old_path": "gprofng/libcollector/heaptrace.c",
      "new_id": "cf39d12cc69d7937945f91fe8ef5bd795c79e579",
      "new_mode": 33188,
      "new_path": "gprofng/libcollector/heaptrace.c"
    }
  ]
}
