{"action":"created","comment":{"url":"https://api.github.com/repos/highfidelity/hifi/pulls/comments/44053374","id":44053374,"diff_hunk":"@@ -20,7 +21,35 @@\n #include <unistd.h> // not on windows, not needed for mac or windows\n #endif\n \n-#include <QDebug>\n+#include <QtCore/QDebug>\n+#include <QtCore/QCoreApplication>\n+\n+// Provides efficient access to a named global type.  By storing the value\n+// in the QApplication by name we can implement the singleton pattern and \n+// have the single instance function across DLL boundaries.  \n+template <typename T, typename ...Args>","path":"libraries/shared/src/SharedUtil.h","position":19,"original_position":19,"commit_id":"2dd84a49c4705fe92219c177b0ac5dce09ade241","original_commit_id":"2dd84a49c4705fe92219c177b0ac5dce09ade241","user":{"login":"Atlante45","id":4036492,"avatar_url":"https://avatars.githubusercontent.com/u/4036492?v=3","gravatar_id":"","url":"https://api.github.com/users/Atlante45","html_url":"https://github.com/Atlante45","followers_url":"https://api.github.com/users/Atlante45/followers","following_url":"https://api.github.com/users/Atlante45/following{/other_user}","gists_url":"https://api.github.com/users/Atlante45/gists{/gist_id}","starred_url":"https://api.github.com/users/Atlante45/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Atlante45/subscriptions","organizations_url":"https://api.github.com/users/Atlante45/orgs","repos_url":"https://api.github.com/users/Atlante45/repos","events_url":"https://api.github.com/users/Atlante45/events{/privacy}","received_events_url":"https://api.github.com/users/Atlante45/received_events","type":"User","site_admin":false},"body":"I'm using the same form in the DependencyManager but I just realized that based on our coding standard regarding `*` and `&`, maybe `typename... Args` would make more sense.\r\nWhat do you think?","created_at":"2015-11-05T19:02:46Z","updated_at":"2015-11-05T19:02:46Z","html_url":"https://github.com/highfidelity/hifi/pull/6282#discussion_r44053374","pull_request_url":"https://api.github.com/repos/highfidelity/hifi/pulls/6282","_links":{"self":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/comments/44053374"},"html":{"href":"https://github.com/highfidelity/hifi/pull/6282#discussion_r44053374"},"pull_request":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/6282"}}},"pull_request":{"url":"https://api.github.com/repos/highfidelity/hifi/pulls/6282","id":49511798,"html_url":"https://github.com/highfidelity/hifi/pull/6282","diff_url":"https://github.com/highfidelity/hifi/pull/6282.diff","patch_url":"https://github.com/highfidelity/hifi/pull/6282.patch","issue_url":"https://api.github.com/repos/highfidelity/hifi/issues/6282","number":6282,"state":"open","locked":false,"title":"Runtime plugins fixes","user":{"login":"jherico","id":1533642,"avatar_url":"https://avatars.githubusercontent.com/u/1533642?v=3","gravatar_id":"","url":"https://api.github.com/users/jherico","html_url":"https://github.com/jherico","followers_url":"https://api.github.com/users/jherico/followers","following_url":"https://api.github.com/users/jherico/following{/other_user}","gists_url":"https://api.github.com/users/jherico/gists{/gist_id}","starred_url":"https://api.github.com/users/jherico/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jherico/subscriptions","organizations_url":"https://api.github.com/users/jherico/orgs","repos_url":"https://api.github.com/users/jherico/repos","events_url":"https://api.github.com/users/jherico/events{/privacy}","received_events_url":"https://api.github.com/users/jherico/received_events","type":"User","site_admin":false},"body":"This is work to correct two issues with our runtime plugins.  \r\n\r\nFirst, if a runtime plugin attempts to call `Menu::instance()` or `DependencyManager::get()` right now it will fail to return the correct value.  This is because both of these objects use a singleton stored as a static.  However, a runtime plugin operating in its own memory space will have a separate copy of the static.  `Menu::instance()` will return a brand new menu object, while `DependencyManager::get()` will return a null pointer, because it's DLL local instance hasn't had any calls to `DependencyManager::set()`.  \r\n\r\nThis is corrected by having the QtCoreApplication object store the value as a property.  The property is looked up by name and instantiated it if doesn't exist.  However, the function that does so also has a function local static that will be populated, so subsequent attempts to fetch the value won't suffer any performance hit from the name lookup.  Currently I've applied this to these two singletons, Menu and DependencyManager, but there are probably others we will need to fix.\r\n\r\nThe second fix is to the build process.  Currently our only plugin is for the Oculus HMD, which functions because it looks up the Oculus DLL which is installed with the runtime.  However many of our plugins will rely on DLLs that have to be packaged with the executable, like SDL.  Right now the plugin is copied because the interface.exe app links to it, but once the functionality is in a plugin, interface.exe no longer has a link to the DLL and the CMake fixup_bundle command won't grab the DLL.  \r\n\r\nThis is corrected by using the second parameter to fixup_bundle, which takes a list of shared libraries to also scan for dependencies, and appears to be designed for precisely this situation.  ","created_at":"2015-11-03T01:55:47Z","updated_at":"2015-11-05T19:02:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"eb268e3b3a9a730d339cf60320f8e502930fa501","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/highfidelity/hifi/pulls/6282/commits","review_comments_url":"https://api.github.com/repos/highfidelity/hifi/pulls/6282/comments","review_comment_url":"https://api.github.com/repos/highfidelity/hifi/pulls/comments{/number}","comments_url":"https://api.github.com/repos/highfidelity/hifi/issues/6282/comments","statuses_url":"https://api.github.com/repos/highfidelity/hifi/statuses/2dd84a49c4705fe92219c177b0ac5dce09ade241","head":{"label":"jherico:externals","ref":"externals","sha":"2dd84a49c4705fe92219c177b0ac5dce09ade241","user":{"login":"jherico","id":1533642,"avatar_url":"https://avatars.githubusercontent.com/u/1533642?v=3","gravatar_id":"","url":"https://api.github.com/users/jherico","html_url":"https://github.com/jherico","followers_url":"https://api.github.com/users/jherico/followers","following_url":"https://api.github.com/users/jherico/following{/other_user}","gists_url":"https://api.github.com/users/jherico/gists{/gist_id}","starred_url":"https://api.github.com/users/jherico/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jherico/subscriptions","organizations_url":"https://api.github.com/users/jherico/orgs","repos_url":"https://api.github.com/users/jherico/repos","events_url":"https://api.github.com/users/jherico/events{/privacy}","received_events_url":"https://api.github.com/users/jherico/received_events","type":"User","site_admin":false},"repo":{"id":29566286,"name":"hifi","full_name":"jherico/hifi","owner":{"login":"jherico","id":1533642,"avatar_url":"https://avatars.githubusercontent.com/u/1533642?v=3","gravatar_id":"","url":"https://api.github.com/users/jherico","html_url":"https://github.com/jherico","followers_url":"https://api.github.com/users/jherico/followers","following_url":"https://api.github.com/users/jherico/following{/other_user}","gists_url":"https://api.github.com/users/jherico/gists{/gist_id}","starred_url":"https://api.github.com/users/jherico/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jherico/subscriptions","organizations_url":"https://api.github.com/users/jherico/orgs","repos_url":"https://api.github.com/users/jherico/repos","events_url":"https://api.github.com/users/jherico/events{/privacy}","received_events_url":"https://api.github.com/users/jherico/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jherico/hifi","description":"Open, decentralized virtual worlds using sensors to control avatars and dynamically assigned devices as servers.  San Francisco based startup, we are hiring: http://highfidelity.io/jobs  Documentation at http://docs.highfidelity.io  Contribute by reporting bugs & doing jobs on http://worklist.net","fork":true,"url":"https://api.github.com/repos/jherico/hifi","forks_url":"https://api.github.com/repos/jherico/hifi/forks","keys_url":"https://api.github.com/repos/jherico/hifi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jherico/hifi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jherico/hifi/teams","hooks_url":"https://api.github.com/repos/jherico/hifi/hooks","issue_events_url":"https://api.github.com/repos/jherico/hifi/issues/events{/number}","events_url":"https://api.github.com/repos/jherico/hifi/events","assignees_url":"https://api.github.com/repos/jherico/hifi/assignees{/user}","branches_url":"https://api.github.com/repos/jherico/hifi/branches{/branch}","tags_url":"https://api.github.com/repos/jherico/hifi/tags","blobs_url":"https://api.github.com/repos/jherico/hifi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jherico/hifi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jherico/hifi/git/refs{/sha}","trees_url":"https://api.github.com/repos/jherico/hifi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jherico/hifi/statuses/{sha}","languages_url":"https://api.github.com/repos/jherico/hifi/languages","stargazers_url":"https://api.github.com/repos/jherico/hifi/stargazers","contributors_url":"https://api.github.com/repos/jherico/hifi/contributors","subscribers_url":"https://api.github.com/repos/jherico/hifi/subscribers","subscription_url":"https://api.github.com/repos/jherico/hifi/subscription","commits_url":"https://api.github.com/repos/jherico/hifi/commits{/sha}","git_commits_url":"https://api.github.com/repos/jherico/hifi/git/commits{/sha}","comments_url":"https://api.github.com/repos/jherico/hifi/comments{/number}","issue_comment_url":"https://api.github.com/repos/jherico/hifi/issues/comments{/number}","contents_url":"https://api.github.com/repos/jherico/hifi/contents/{+path}","compare_url":"https://api.github.com/repos/jherico/hifi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jherico/hifi/merges","archive_url":"https://api.github.com/repos/jherico/hifi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jherico/hifi/downloads","issues_url":"https://api.github.com/repos/jherico/hifi/issues{/number}","pulls_url":"https://api.github.com/repos/jherico/hifi/pulls{/number}","milestones_url":"https://api.github.com/repos/jherico/hifi/milestones{/number}","notifications_url":"https://api.github.com/repos/jherico/hifi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jherico/hifi/labels{/name}","releases_url":"https://api.github.com/repos/jherico/hifi/releases{/id}","created_at":"2015-01-21T02:11:03Z","updated_at":"2015-05-08T17:48:46Z","pushed_at":"2015-11-05T07:45:17Z","git_url":"git://github.com/jherico/hifi.git","ssh_url":"git@github.com:jherico/hifi.git","clone_url":"https://github.com/jherico/hifi.git","svn_url":"https://github.com/jherico/hifi","homepage":"","size":184206,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"highfidelity:master","ref":"master","sha":"be33b40ced5aa780c68bce235dc8dbc7b8e33ab2","user":{"login":"highfidelity","id":1565370,"avatar_url":"https://avatars.githubusercontent.com/u/1565370?v=3","gravatar_id":"","url":"https://api.github.com/users/highfidelity","html_url":"https://github.com/highfidelity","followers_url":"https://api.github.com/users/highfidelity/followers","following_url":"https://api.github.com/users/highfidelity/following{/other_user}","gists_url":"https://api.github.com/users/highfidelity/gists{/gist_id}","starred_url":"https://api.github.com/users/highfidelity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/highfidelity/subscriptions","organizations_url":"https://api.github.com/users/highfidelity/orgs","repos_url":"https://api.github.com/users/highfidelity/repos","events_url":"https://api.github.com/users/highfidelity/events{/privacy}","received_events_url":"https://api.github.com/users/highfidelity/received_events","type":"Organization","site_admin":false},"repo":{"id":5372872,"name":"hifi","full_name":"highfidelity/hifi","owner":{"login":"highfidelity","id":1565370,"avatar_url":"https://avatars.githubusercontent.com/u/1565370?v=3","gravatar_id":"","url":"https://api.github.com/users/highfidelity","html_url":"https://github.com/highfidelity","followers_url":"https://api.github.com/users/highfidelity/followers","following_url":"https://api.github.com/users/highfidelity/following{/other_user}","gists_url":"https://api.github.com/users/highfidelity/gists{/gist_id}","starred_url":"https://api.github.com/users/highfidelity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/highfidelity/subscriptions","organizations_url":"https://api.github.com/users/highfidelity/orgs","repos_url":"https://api.github.com/users/highfidelity/repos","events_url":"https://api.github.com/users/highfidelity/events{/privacy}","received_events_url":"https://api.github.com/users/highfidelity/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/highfidelity/hifi","description":"Open source software for shared virtual worlds using HMDs and dynamically assigned devices as servers.  San Francisco based startup, we are hiring: http://highfidelity.com/jobs  Documentation at http://docs.highfidelity.com  Contribute by reporting bugs & doing jobs on http://worklist.net","fork":false,"url":"https://api.github.com/repos/highfidelity/hifi","forks_url":"https://api.github.com/repos/highfidelity/hifi/forks","keys_url":"https://api.github.com/repos/highfidelity/hifi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/highfidelity/hifi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/highfidelity/hifi/teams","hooks_url":"https://api.github.com/repos/highfidelity/hifi/hooks","issue_events_url":"https://api.github.com/repos/highfidelity/hifi/issues/events{/number}","events_url":"https://api.github.com/repos/highfidelity/hifi/events","assignees_url":"https://api.github.com/repos/highfidelity/hifi/assignees{/user}","branches_url":"https://api.github.com/repos/highfidelity/hifi/branches{/branch}","tags_url":"https://api.github.com/repos/highfidelity/hifi/tags","blobs_url":"https://api.github.com/repos/highfidelity/hifi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/highfidelity/hifi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/highfidelity/hifi/git/refs{/sha}","trees_url":"https://api.github.com/repos/highfidelity/hifi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/highfidelity/hifi/statuses/{sha}","languages_url":"https://api.github.com/repos/highfidelity/hifi/languages","stargazers_url":"https://api.github.com/repos/highfidelity/hifi/stargazers","contributors_url":"https://api.github.com/repos/highfidelity/hifi/contributors","subscribers_url":"https://api.github.com/repos/highfidelity/hifi/subscribers","subscription_url":"https://api.github.com/repos/highfidelity/hifi/subscription","commits_url":"https://api.github.com/repos/highfidelity/hifi/commits{/sha}","git_commits_url":"https://api.github.com/repos/highfidelity/hifi/git/commits{/sha}","comments_url":"https://api.github.com/repos/highfidelity/hifi/comments{/number}","issue_comment_url":"https://api.github.com/repos/highfidelity/hifi/issues/comments{/number}","contents_url":"https://api.github.com/repos/highfidelity/hifi/contents/{+path}","compare_url":"https://api.github.com/repos/highfidelity/hifi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/highfidelity/hifi/merges","archive_url":"https://api.github.com/repos/highfidelity/hifi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/highfidelity/hifi/downloads","issues_url":"https://api.github.com/repos/highfidelity/hifi/issues{/number}","pulls_url":"https://api.github.com/repos/highfidelity/hifi/pulls{/number}","milestones_url":"https://api.github.com/repos/highfidelity/hifi/milestones{/number}","notifications_url":"https://api.github.com/repos/highfidelity/hifi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/highfidelity/hifi/labels{/name}","releases_url":"https://api.github.com/repos/highfidelity/hifi/releases{/id}","created_at":"2012-08-10T18:26:22Z","updated_at":"2015-11-04T12:13:55Z","pushed_at":"2015-11-05T18:56:29Z","git_url":"git://github.com/highfidelity/hifi.git","ssh_url":"git@github.com:highfidelity/hifi.git","clone_url":"https://github.com/highfidelity/hifi.git","svn_url":"https://github.com/highfidelity/hifi","homepage":"","size":253608,"stargazers_count":322,"watchers_count":322,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":188,"mirror_url":null,"open_issues_count":64,"forks":188,"open_issues":64,"watchers":322,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/6282"},"html":{"href":"https://github.com/highfidelity/hifi/pull/6282"},"issue":{"href":"https://api.github.com/repos/highfidelity/hifi/issues/6282"},"comments":{"href":"https://api.github.com/repos/highfidelity/hifi/issues/6282/comments"},"review_comments":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/6282/comments"},"review_comment":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/6282/commits"},"statuses":{"href":"https://api.github.com/repos/highfidelity/hifi/statuses/2dd84a49c4705fe92219c177b0ac5dce09ade241"}}}}