{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":186846364,"defaultBranch":"master","name":"wil","ownerLogin":"oldnewthing","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2019-05-15T14:43:44.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/12550607?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1695849462.0","currentOid":""},"activityList":{"items":[{"before":"6befa975bfc93ee1aec31028cc53009eff02e403","after":"ff198b0efbd8fa8d4f3d23a039fb037ccfc309d9","ref":"refs/heads/to_array_view","pushedAt":"2023-11-15T19:47:51.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"jonwis","name":"Jon Wiswall","path":"/jonwis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18537118?s=80&v=4"},"commit":{"message":"Merge branch 'master' into to_array_view","shortMessageHtmlLink":"Merge branch 'master' into to_array_view"}},{"before":"5151b52eea14fae09ee122f978c4bd7c5e9c93d5","after":"6befa975bfc93ee1aec31028cc53009eff02e403","ref":"refs/heads/to_array_view","pushedAt":"2023-11-07T17:22:00.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"dunhor","name":"Duncan Horn","path":"/dunhor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/40036384?s=80&v=4"},"commit":{"message":"Merge branch 'master' into to_array_view","shortMessageHtmlLink":"Merge branch 'master' into to_array_view"}},{"before":"f77b41beedfd395e1f4f0aa2a8fe96e1b865c510","after":"5151b52eea14fae09ee122f978c4bd7c5e9c93d5","ref":"refs/heads/to_array_view","pushedAt":"2023-10-31T04:09:26.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"jonwis","name":"Jon Wiswall","path":"/jonwis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18537118?s=80&v=4"},"commit":{"message":"Merge branch 'master' into to_array_view","shortMessageHtmlLink":"Merge branch 'master' into to_array_view"}},{"before":"19be7698b78c8ecd573b1b6680420916414fa92e","after":"f77b41beedfd395e1f4f0aa2a8fe96e1b865c510","ref":"refs/heads/to_array_view","pushedAt":"2023-10-24T16:31:53.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"dunhor","name":"Duncan Horn","path":"/dunhor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/40036384?s=80&v=4"},"commit":{"message":"Merge branch 'master' into to_array_view","shortMessageHtmlLink":"Merge branch 'master' into to_array_view"}},{"before":"dc1a172288f882895115cde4031683274365adbe","after":"19be7698b78c8ecd573b1b6680420916414fa92e","ref":"refs/heads/to_array_view","pushedAt":"2023-10-20T16:28:36.000Z","pushType":"push","commitsCount":4,"pusher":{"login":"dunhor","name":"Duncan Horn","path":"/dunhor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/40036384?s=80&v=4"},"commit":{"message":"Merge branch 'master' into to_array_view","shortMessageHtmlLink":"Merge branch 'master' into to_array_view"}},{"before":"bcc486d04fc39893c476db817e377a0cceecbcdf","after":null,"ref":"refs/heads/ensure_com_cleaned_up","pushedAt":"2023-09-27T21:17:42.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"}},{"before":"806bd3a3c093e2b47bbb3728ec11dccab4cabc10","after":"bcc486d04fc39893c476db817e377a0cceecbcdf","ref":"refs/heads/ensure_com_cleaned_up","pushedAt":"2023-09-27T21:01:18.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"dunhor","name":"Duncan Horn","path":"/dunhor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/40036384?s=80&v=4"},"commit":{"message":"Merge branch 'master' into ensure_com_cleaned_up","shortMessageHtmlLink":"Merge branch 'master' into ensure_com_cleaned_up"}},{"before":"894b40bcf92bae7fec82aa58873e3b8192ff6083","after":"806bd3a3c093e2b47bbb3728ec11dccab4cabc10","ref":"refs/heads/ensure_com_cleaned_up","pushedAt":"2023-09-27T16:18:20.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"},"commit":{"message":"Don't wait indefinitely for DQ to shut down\n\nLet the WFSO do the wait for both the shutdown and the thread exit.\n\nAlso check the TryEnqueue just for extra safety.\n\nNow that we fixed test conflict, we can let the XAML test coexist with the mallocspy test.","shortMessageHtmlLink":"Don't wait indefinitely for DQ to shut down"}},{"before":"6fdc4db56979a36687fb9f2410d8b5f95f456bd4","after":"894b40bcf92bae7fec82aa58873e3b8192ff6083","ref":"refs/heads/ensure_com_cleaned_up","pushedAt":"2023-09-26T21:44:07.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"},"commit":{"message":"Need to initialize as MTA to avoid sync wait on STA","shortMessageHtmlLink":"Need to initialize as MTA to avoid sync wait on STA"}},{"before":null,"after":"6fdc4db56979a36687fb9f2410d8b5f95f456bd4","ref":"refs/heads/ensure_com_cleaned_up","pushedAt":"2023-09-26T21:37:42.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"},"commit":{"message":"Fix malloc spy conflict with CppWinRTAuthoringTests::NotifyPropertyChanged\n\nThe CppWinRTAuthoringTests::NotifyPropertyChanged test\ndid not clean up everything before it exited. This resulted\nin COM remaining initialized at process termination, and\nthat in turn resulted in adverse interactions with the malloc\nspy test, since the \"emergency cleanup\" calls CoTaskMemFree,\nand since COM was put into \"possible malloc spy\" mode, it\ntries to take a lock to protect the potential malloc spy.\nBut that lock no longer exists, since COM has shut down,\nand things spiral downhill.\n\nThe NotifyPropertyChanged test tries to clean up the\nWindowsXamlManager, but it didn't realize that Close()\nis an asynchronous call that queues work back to the\ncurrent thread's DispatcherQueue for final cleanup.\nThe old test just returned immediately and never pumped\nmessages any more, which resulted in the cleanup never\nhappening.\n\nTo ensure we clean up the WindowsXamlManager, we create\nour own DispatcherQueue for the XAML work. Since it's\nour DispatcherQueue, we can call ShutdownQueueAsync\nto clean it up. ShutdownQueueAsync completes when the\nqueue has shut down, but before the thread uninitializes COM.\nWe wait for the DispatcherQueue thread to exit, so that we\nknow for sure that it has definitely uninitialized COM.\nOnly then do we allow the test to complete.\n\nThis cleans up the leaked COM initialization and avoids\na condition crash during \"emergency cleanup\".","shortMessageHtmlLink":"Fix malloc spy conflict with CppWinRTAuthoringTests::NotifyPropertyCh…"}},{"before":"d63111c1251f244d018da4cb3fb8d66caff49455","after":"dc1a172288f882895115cde4031683274365adbe","ref":"refs/heads/to_array_view","pushedAt":"2023-09-17T22:51:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"},"commit":{"message":"Simpler way of making IMemoryBufferByteAccess dependent\n\nWe can make it a dependent type on the existing template type\nparameter T.\n\nAlso update the test to (1) avoid endianness, (2) let the\ncompiler deal with the magic numbers.","shortMessageHtmlLink":"Simpler way of making IMemoryBufferByteAccess dependent"}},{"before":null,"after":"d63111c1251f244d018da4cb3fb8d66caff49455","ref":"refs/heads/to_array_view","pushedAt":"2023-09-15T04:18:24.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"},"commit":{"message":"wil::to_array_view provides safer access to IBuffer / IMemoryBuffer\n\nThe existing `.data()` member gives you a pointer to the start\nof the buffer but you are on your own to get the buffer size by other means.\n\nThe new `wil::to_array_view` function returns the buffer bytes\nin the form of a `winrt::array_view`, which encodes both the\nstart of the buffer as well as its length.\n\nBy default, you get an `array_view`, but you can customize\nthe data type by calling `to_array_view` to get an `array_view`.\nAny partial `T`s are ignored. For example, if the buffer is 6 bytes long,\nthen calling `to_array_view` will give you a view of size 1.\n\nTo get the `IMemoryBuffer` and `IMemoryBufferReference` versions,\nyou must include `winrt/Windows.Foundation.h` before `wil/cppwinrt_helpers.h`,\nand you must include `MemoryBuffer.h` at some point before using\n`to_array_view`.\n\nTo get the `IBuffer` version, you must include `winrt/Windows.Storage.Streams.h`\nbefore `wil/cppwinrt_helpers.h`.\n\nThe `IBuffer` version defaults to returning an `array_view` for the buffer's\nlength. If you want an `array_view` for the buffer's capacity, you can use\n`to_array_view_for_capacity`.\n\nWe follow the pattern of allowing `cppwinrt_helpers.h` to be included multiple\ntimes, and each time you do it, new features light up based on what headers\nyou have included prior to including `cppwinrt_helpers.h`.","shortMessageHtmlLink":"wil::to_array_view provides safer access to IBuffer / IMemoryBuffer"}},{"before":"5b3aad361e618404eee71acef842ced302c2e609","after":"3895ea0dccf685fc831fc8410f19d8e8ac6d95f9","ref":"refs/heads/conditional_interfaces","pushedAt":"2023-05-31T18:15:52.654Z","pushType":"push","commitsCount":2,"pusher":{"login":"jonwis","name":"Jon Wiswall","path":"/jonwis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18537118?s=80&v=4"},"commit":{"message":"Merge branch 'master' into conditional_interfaces","shortMessageHtmlLink":"Merge branch 'master' into conditional_interfaces"}},{"before":"2575db550f7f6eb0ff661e38e78966a78418b05b","after":"3eae317cf8f49d7f276c0ed08fca529b2d41f727","ref":"refs/heads/resume_any_apartment","pushedAt":"2023-05-11T04:58:49.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"},"commit":{"message":"Add 'inline' keywords to avoid ODR problems","shortMessageHtmlLink":"Add 'inline' keywords to avoid ODR problems"}},{"before":null,"after":"2575db550f7f6eb0ff661e38e78966a78418b05b","ref":"refs/heads/resume_any_apartment","pushedAt":"2023-05-11T04:13:34.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"},"commit":{"message":"co_await resume_any_apartment(async) resumes in any apartment\n\nThis lets you override the default \"return to the original\napartment\" behavior of `co_await`'ing an `IAsyncInfo`.\n\nThis is the C++/WinRT counterpart to C# `ConfigureAwait(false)`.\n\nThis is basically a copy of the C++/WinRT awaiter, but with\nthe one line of apartment-switching code deleted. Unfortunately,\nit's a good amount of code that has to be duplicated.\n\nThe code is made a bit more complicated by the fact that it\nhas to deal with two sets of client options:\n\n* C++/WinRT version 230207 introduced a breaking change in\n how custom awaiters support cancellation propagation, so\n we generate different cancellation support depending on which\n C++/WinRT version you are using.\n* Avoiding a memory corruption bug in MSVC pre-standardization\n coroutines. This is fixed in VS version 16.11, but pre-16.11 and\n post-16.11 pre-standardization coroutines are ABI compatible, so\n changing behavior based on the VS version could lead to ODR violations.\n Instead, we key off the ABI breaking change in MSVC standardized\n coroutines in C++20, since the ABI break prevents you from linking\n pre-standardized coroutines with standardized coroutines. (This is\n the same solution that C++/WinRT itself uses.)\n\nFixes #274","shortMessageHtmlLink":"co_await resume_any_apartment(async) resumes in any apartment"}},{"before":"5d68e79f4f2f37e7e1cc980ab1c7f9359263fe13","after":"5b3aad361e618404eee71acef842ced302c2e609","ref":"refs/heads/conditional_interfaces","pushedAt":"2023-05-10T22:52:06.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"},"commit":{"message":"Add unit test for wil::winrt_conditionally_implements","shortMessageHtmlLink":"Add unit test for wil::winrt_conditionally_implements"}},{"before":"6b909794f2b62a95f21f2cf374db4d4d82c4ac83","after":"5d68e79f4f2f37e7e1cc980ab1c7f9359263fe13","ref":"refs/heads/conditional_interfaces","pushedAt":"2023-05-09T00:17:27.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"},"commit":{"message":"wil::winrt_conditionally_implements for conditionally implementing an interface\n\nThis lets you selective hide interfaces on an object.","shortMessageHtmlLink":"wil::winrt_conditionally_implements for conditionally implementing an…"}},{"before":"57a57cd7ebaa8092f2056ebfdac6a367cf0bc928","after":"6b909794f2b62a95f21f2cf374db4d4d82c4ac83","ref":"refs/heads/conditional_interfaces","pushedAt":"2023-05-09T00:09:27.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"},"commit":{"message":"wil::winrt_conditionally_implements for conditionally implementing an interface\n\nThis lets you selective hide interfaces on an object.","shortMessageHtmlLink":"wil::winrt_conditionally_implements for conditionally implementing an…"}},{"before":null,"after":"57a57cd7ebaa8092f2056ebfdac6a367cf0bc928","ref":"refs/heads/conditional_interfaces","pushedAt":"2023-05-09T00:06:42.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"},"commit":{"message":"Add GetWindowsDirectoryW to win32_helpers.h (#313)\n\n* Add GetWindowsDirectoryW to win32_helpers.h\r\n\r\n* Add test\r\n\r\n---------\r\n\r\nCo-authored-by: Duncan Horn <40036384+dunhor@users.noreply.github.com>\r\nCo-authored-by: Jon Wiswall ","shortMessageHtmlLink":"Add GetWindowsDirectoryW to win32_helpers.h (microsoft#313)"}},{"before":"4790c5a5cf1206d6d15a2ec3b07b2ed11adfa625","after":null,"ref":"refs/heads/coroutine","pushedAt":"2023-04-20T00:21:04.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"}},{"before":"304dba3f4fc762720177d51ebc5301ec9626bf63","after":"4790c5a5cf1206d6d15a2ec3b07b2ed11adfa625","ref":"refs/heads/coroutine","pushedAt":"2023-04-19T18:39:01.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"},"commit":{"message":"PR feedback","shortMessageHtmlLink":"PR feedback"}},{"before":"87cbbf283f4086f902e51f9ea89232dcf291ae14","after":"304dba3f4fc762720177d51ebc5301ec9626bf63","ref":"refs/heads/coroutine","pushedAt":"2023-04-19T17:18:17.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"},"commit":{"message":"Fix unqualified lookup of dependent base (injected class name)","shortMessageHtmlLink":"Fix unqualified lookup of dependent base (injected class name)"}},{"before":"43e05698df888af78b895764c7014359129668b2","after":"87cbbf283f4086f902e51f9ea89232dcf291ae14","ref":"refs/heads/coroutine","pushedAt":"2023-04-19T16:03:56.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"},"commit":{"message":"Appease clang static analysis about incomplete switch statement","shortMessageHtmlLink":"Appease clang static analysis about incomplete switch statement"}},{"before":"e96066ee7272614a77a432893ebb53bc30736fc0","after":"43e05698df888af78b895764c7014359129668b2","ref":"refs/heads/coroutine","pushedAt":"2023-04-19T15:45:29.000Z","pushType":"push","commitsCount":20,"pusher":{"login":"oldnewthing","name":"Raymond Chen","path":"/oldnewthing","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12550607?s=80&v=4"},"commit":{"message":"Merge branch 'master' into coroutine","shortMessageHtmlLink":"Merge branch 'master' into coroutine"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAADsA0GuwA","startCursor":null,"endCursor":null}},"title":"Activity · oldnewthing/wil"}