{"push_id":1141346349,"size":4,"distinct_size":4,"ref":"refs/heads/master","head":"f1dd6fe7488b0de7fdd8beda7cf3a15cd4f9bce2","before":"b2cf10659d74681988ad53c18f368c007990d829","commits":[{"sha":"755056dd25052d1105aa64707775d60ca82ac62f","author":{"name":"Alex Rønne Petersen","email":"11bd6936beadb1e60aa68aa6e453b406f867e278@xamarin.com"},"message":"[gc] Register a critical region when executing managed allocators.\n\nPreviously, if we stopped a thread and it had a stack looking like this:\n\n    ...\n    profiler_signal_handler\n    <signal handler called>\n    managed_allocator\n    ...\n\nWe would fail to identify the fact that we've just interrupted a thread that's\nin a managed allocator (uninterruptible code) because we only look at the very\nlatest instruction pointer of the thread, which will be pointing into\nprofiler_signal_handler or some other function called by it. So we would\nhappily continue along with the STW process and proceed to doing the actual GC,\nwhere we would see a broken heap.\n\nWe could solve this by unwinding the stack and checking all frames, but that's\ncomplicated and error-prone. Instead, register a critical region while the\nmanaged allocator. This way, if we don't identify it by instruction pointer, we\nwill identify it by the fact that the thread is in a critical region.","distinct":true,"url":"https://api.github.com/repos/mono/mono/commits/755056dd25052d1105aa64707775d60ca82ac62f"},{"sha":"f0868d79d9e203305c753953f974d3491f7c3fb8","author":{"name":"Alex Rønne Petersen","email":"11bd6936beadb1e60aa68aa6e453b406f867e278@xamarin.com"},"message":"[sgen] Cache the SgenThreadInfo pointer in a local when emitting managed allocators.","distinct":true,"url":"https://api.github.com/repos/mono/mono/commits/f0868d79d9e203305c753953f974d3491f7c3fb8"},{"sha":"f9ef2ce1222358090dea0f330cdf07b82b72b628","author":{"name":"Alex Rønne Petersen","email":"11bd6936beadb1e60aa68aa6e453b406f867e278@xamarin.com"},"message":"[arm] Don't emit memory barriers for relaxed atomic loads/stores.","distinct":true,"url":"https://api.github.com/repos/mono/mono/commits/f9ef2ce1222358090dea0f330cdf07b82b72b628"},{"sha":"f1dd6fe7488b0de7fdd8beda7cf3a15cd4f9bce2","author":{"name":"monojenkins","email":"4499cda2bcc6bb50206f66afce9cb024af676d48@xamarin.com"},"message":"Merge pull request #2881 from alexrp/gc-sample-managed-alloc\n\n[gc] Register a critical region when executing managed allocators.\n\nPreviously, if we stopped a thread and it had a stack looking like this:\r\n\r\n    ...\r\n    profiler_signal_handler\r\n    <signal handler called>\r\n    managed_allocator\r\n    ...\r\n\r\nWe would fail to identify the fact that we've just interrupted a thread that's\r\nin a managed allocator (uninterruptible code) because we only look at the very\r\nlatest instruction pointer of the thread, which will be pointing into\r\nprofiler_signal_handler or some other function called by it. So we would\r\nhappily continue along with the STW process and proceed to doing the actual GC,\r\nwhere we would see a broken heap.\r\n\r\nWe could solve this by unwinding the stack and checking all frames, but that's\r\ncomplicated and error-prone. Instead, register a critical region while the\r\nmanaged allocator runs. This way, if we don't identify it by instruction pointer, we\r\nwill identify it by the fact that the thread is in a critical region.","distinct":true,"url":"https://api.github.com/repos/mono/mono/commits/f1dd6fe7488b0de7fdd8beda7cf3a15cd4f9bce2"}]}
{"actor":{"display_login":"monojenkins"}}