{"action":"closed","issue":{"url":"https://api.github.com/repos/khuck/xpress-apex/issues/59","repository_url":"https://api.github.com/repos/khuck/xpress-apex","labels_url":"https://api.github.com/repos/khuck/xpress-apex/issues/59/labels{/name}","comments_url":"https://api.github.com/repos/khuck/xpress-apex/issues/59/comments","events_url":"https://api.github.com/repos/khuck/xpress-apex/issues/59/events","html_url":"https://github.com/khuck/xpress-apex/issues/59","id":143739308,"number":59,"title":"Remove thread_instance stack of timers?","user":{"login":"khuck","id":528511,"avatar_url":"https://avatars.githubusercontent.com/u/528511?v=3","gravatar_id":"","url":"https://api.github.com/users/khuck","html_url":"https://github.com/khuck","followers_url":"https://api.github.com/users/khuck/followers","following_url":"https://api.github.com/users/khuck/following{/other_user}","gists_url":"https://api.github.com/users/khuck/gists{/gist_id}","starred_url":"https://api.github.com/users/khuck/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/khuck/subscriptions","organizations_url":"https://api.github.com/users/khuck/orgs","repos_url":"https://api.github.com/users/khuck/repos","events_url":"https://api.github.com/users/khuck/events{/privacy}","received_events_url":"https://api.github.com/users/khuck/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/khuck/xpress-apex/labels/HPX-3","name":"HPX-3","color":"5319e7"},{"url":"https://api.github.com/repos/khuck/xpress-apex/labels/HPX-5","name":"HPX-5","color":"eb6420"}],"state":"closed","locked":false,"assignee":{"login":"khuck","id":528511,"avatar_url":"https://avatars.githubusercontent.com/u/528511?v=3","gravatar_id":"","url":"https://api.github.com/users/khuck","html_url":"https://github.com/khuck","followers_url":"https://api.github.com/users/khuck/followers","following_url":"https://api.github.com/users/khuck/following{/other_user}","gists_url":"https://api.github.com/users/khuck/gists{/gist_id}","starred_url":"https://api.github.com/users/khuck/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/khuck/subscriptions","organizations_url":"https://api.github.com/users/khuck/orgs","repos_url":"https://api.github.com/users/khuck/repos","events_url":"https://api.github.com/users/khuck/events{/privacy}","received_events_url":"https://api.github.com/users/khuck/received_events","type":"User","site_admin":false},"assignees":[{"login":"khuck","id":528511,"avatar_url":"https://avatars.githubusercontent.com/u/528511?v=3","gravatar_id":"","url":"https://api.github.com/users/khuck","html_url":"https://github.com/khuck","followers_url":"https://api.github.com/users/khuck/followers","following_url":"https://api.github.com/users/khuck/following{/other_user}","gists_url":"https://api.github.com/users/khuck/gists{/gist_id}","starred_url":"https://api.github.com/users/khuck/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/khuck/subscriptions","organizations_url":"https://api.github.com/users/khuck/orgs","repos_url":"https://api.github.com/users/khuck/repos","events_url":"https://api.github.com/users/khuck/events{/privacy}","received_events_url":"https://api.github.com/users/khuck/received_events","type":"User","site_admin":false}],"milestone":null,"comments":2,"created_at":"2016-03-26T18:49:24Z","updated_at":"2016-08-17T18:18:05Z","closed_at":"2016-08-17T18:18:05Z","body":"Currently, each OS thread in APEX is maintaining a stack of currently running timers. While this seems like a good idea, this is bad within the context of what APEX is doing. When timers are started on OS thread A and stopped on thread B, they stay in B's stack until the application exits. They will be marked as stopped, so they won't get processed, but this could have long-term implications for timers that migrate, causing deep stacks that waste memory and processing.\r\n\r\nIt would be better if the apex_profiler_handle is returned to the application/library code, and that is used to stop the timer, on whatever OS thread gets the \"stop\" call.\r\n\r\nThe profiles are currently managed with std::shared_ptr<profiler> objects so that they can automatically be freed when the last listener is done with it. That should still be true, but APEX shouldn't use shared_ptr objects when the profiler is created and started, only when it comes in to be stopped (and subsequently destroyed when processed by the last listener).\r\n\r\nThis work is already started in the remove_thread_profiler_stacks branch.\r\n\r\nUnresolved problem - what happens with PAPI metrics? Each OS thread has a PAPI EventSet object, and when they are read at start & stop, what do the values represent?\r\n\r\nKeep in mind that it is assumed that TAU will no longer work with cases that exhibit this behavior (due to overlapping timers).  Which is the whole reason APEX exists..."}}
{"actor":{"display_login":"khuck"}}