{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":2349110,"defaultBranch":"master","name":"ffi","ownerLogin":"larskanis","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2011-09-08T15:15:02.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/176234?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1713980814.0","currentOid":""},"activityList":{"items":[{"before":"75cc16107563fde17b4ba8e4bd73439e7d4d5eea","after":null,"ref":"refs/heads/add_read_aos","pushedAt":"2024-04-24T17:46:54.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"}},{"before":"475b5ecb39f5ad636f28a1552693370dcab8d5cd","after":null,"ref":"refs/heads/AutoPointer-without-block","pushedAt":"2024-04-23T15:27:56.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"}},{"before":"c0a114a710018479bea18f7b48b0976a9e8d436f","after":"475b5ecb39f5ad636f28a1552693370dcab8d5cd","ref":"refs/heads/AutoPointer-without-block","pushedAt":"2024-04-22T19:22:59.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"Remove AutoPointer.new with block from documentation\n\nIt was never implemented since it doesn't work.\n\nFixes #1071","shortMessageHtmlLink":"Remove AutoPointer.new with block from documentation"}},{"before":null,"after":"c0a114a710018479bea18f7b48b0976a9e8d436f","ref":"refs/heads/AutoPointer-without-block","pushedAt":"2024-04-22T19:22:38.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"Remove AutoPointer.new with block from documentation\n\nIt was never implemented since it doesn't work.","shortMessageHtmlLink":"Remove AutoPointer.new with block from documentation"}},{"before":null,"after":"75cc16107563fde17b4ba8e4bd73439e7d4d5eea","ref":"refs/heads/add_read_aos","pushedAt":"2024-04-22T18:35:27.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"Add FFI::AbstractMemory#read_array_of_string\n\nIt was defined but not exposed to Ruby nor tested.\n\nFixes #1070","shortMessageHtmlLink":"Add FFI::AbstractMemory#read_array_of_string"}},{"before":"7d400a3ba2888c65a69f90fca60e5cf68389873b","after":null,"ref":"refs/heads/more-obj-write","pushedAt":"2024-04-22T06:39:18.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"}},{"before":null,"after":"7d400a3ba2888c65a69f90fca60e5cf68389873b","ref":"refs/heads/more-obj-write","pushedAt":"2024-04-22T06:24:41.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"Use RARRAY_LENINT instead of casting\n\nThis ensures the int value range is not exceeded.","shortMessageHtmlLink":"Use RARRAY_LENINT instead of casting"}},{"before":"4d1d32ef0459576298d9d6d79cc81ed076a5c819","after":null,"ref":"refs/heads/search-path","pushedAt":"2024-04-05T18:37:05.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"}},{"before":"01c558c163c9a3ea51859e36de068d16f47063bf","after":"4d1d32ef0459576298d9d6d79cc81ed076a5c819","ref":"refs/heads/search-path","pushedAt":"2024-04-05T14:44:51.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"Improve fallback search path logic\n\nThe whole logic is only executed on Macos and only as a fallback, if the requested library failed to load.\n\nFor compat to Ractor the SEARCH_PATH is now freezed.","shortMessageHtmlLink":"Improve fallback search path logic"}},{"before":"9984c8d5df2ac9743842ddddb51766dd6acd7311","after":"01c558c163c9a3ea51859e36de068d16f47063bf","ref":"refs/heads/search-path","pushedAt":"2024-04-01T19:25:13.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"Improve fallback search path logic\n\nThe whole logic is only executed on Macos and only as a fallback, if the requested library failed to load.\n\nOn Linux the library lookup paths are usually defined through /etc/ld.so.conf, which can be changed at will with root permissions.\nAlso LD_LIBRARY_PATH is respected by the dynamic loader, so that there's usually no need and no advantage to do a fallback handling.\n\nWindows has it's own library lookup logic, very different to what we do here.\nSee: https://github.com/oneclick/rubyinstaller2/wiki/For-gem-developers#user-content-dll-loading\n\nSo the fallback lookup is now only executed on Macos.\n\nOn Macos the logic is as following in that order:\n\n1. Try library paths possibly defined in LD_LIBRARY_PATH DYLD_LIBRARY_PATH first.\n2. Then on macos/arm64 try /opt/homebrew/lib, since this is a typical standard directory.\n3. Then try typical system directories starting with the /local/ directory first.\n\nTo 1: This is because dlopen doesn't respect LD_LIBRARY_PATH and DYLD_LIBRARY_PATH is deleted by SIP-protected binaries.\nSee here for details: https://github.com/ffi/ffi/issues/923#issuecomment-1872565313\n\nTo 2: FFI is often used together with homebrew, so that we hardcode the path for arm64 here.\n\nTo 3: /usr/local/lib is used by homebrow on x86_64.\n /opt/local/lib is used by MacPorts, Fink\n /usr/lib is there, because it was always there.\n\nFor compat to Ractor the SEARCH_PATH is now freezed.","shortMessageHtmlLink":"Improve fallback search path logic"}},{"before":"ebfd703b4fe227b4056dfaa052751baa93d831bf","after":"9984c8d5df2ac9743842ddddb51766dd6acd7311","ref":"refs/heads/search-path","pushedAt":"2024-04-01T19:07:56.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"Improve fallback search path logic\n\nThe whole logic is only executed as a fallback, if the requested library failed to load and only on Macos.\n\nOn Linux the library lookup paths are usually defined through /etc/ld.so.conf, which can be changed at will with root permissions.\nAlso LD_LIBRARY_PATH is respected by the dynamic loader, so that there's usually no need and no advantage to do a fallback handling.\n\nWindows has it's own library lookup logic, very different to what we do here.\nSee: https://github.com/oneclick/rubyinstaller2/wiki/For-gem-developers#user-content-dll-loading\n\nSo the fallback lookup is now only executed on Macos.\n\nOn Macos the logic is as following in that order:\n\n1. Try library paths possibly defined in LD_LIBRARY_PATH DYLD_LIBRARY_PATH first.\n2. Then on macos/arm64 try /opt/homebrew/lib, since this is a typical standard directory.\n3. Then try typical system directories starting with the /local/ directory first.\n\nTo 1: This is because dlopen doesn't respect LD_LIBRARY_PATH and DYLD_LIBRARY_PATH is deleted by SIP-protected binaries.\nSee here for details: https://github.com/ffi/ffi/issues/923#issuecomment-1872565313\n\nTo 2: FFI is often used together with homebrew, so that we hardcode the path for arm64 here.\n\nTo 3: /usr/local/lib is used by homebrow on x86_64.\n /opt/local/lib is used by MacPorts, Fink\n /usr/lib is there, because it was always there.\n\nFor compat to Ractor the SEARCH_PATH is now freezed.","shortMessageHtmlLink":"Improve fallback search path logic"}},{"before":"73813299777978c9d902807d82512e6e37e8a75d","after":"ebfd703b4fe227b4056dfaa052751baa93d831bf","ref":"refs/heads/search-path","pushedAt":"2024-04-01T18:55:36.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"Improve fallback search path logic\n\nThe whole logic is only executed as a fallback, if the requested library failed to load and only on Macos.\n\nOn Linux the library lookup paths are usually defined through /etc/ld.so.conf, which can be changed at will with root permissions.\nAlso LD_LIBRARY_PATH is respected by the dynamic loader, so that there's usually no need and no advantage to do a fallback handling.\n\nWindows has it's own library lookup logic, very different to what we do here.\nSee: https://github.com/oneclick/rubyinstaller2/wiki/For-gem-developers#user-content-dll-loading\n\nSo the fallback lookup is now only executed on Macos.\n\nOn Macos the logic is as following in that order:\n\n1. Try library paths possibly defined in LD_LIBRARY_PATH DYLD_LIBRARY_PATH first.\n2. Then on macos/arm64 try /opt/homebrew/lib, since this is a typical standard directory.\n3. Then try typical system directories starting with the /local/ directory first.\n\nTo 1: This is because dlopen doesn't respect LD_LIBRARY_PATH and DYLD_LIBRARY_PATH is deleted by SIP-protected binaries.\nSee here for details: https://github.com/ffi/ffi/issues/923#issuecomment-1872565313\n\nTo 2: FFI is often used together with homebrew, so that we hardcode the path for arm64 here.\n\nTo 3: /usr/local/lib is used by homebrow on x86_64.\n /opt/local/lib is used by MacPorts, Fink\n /usr/lib is there, because it was always there.","shortMessageHtmlLink":"Improve fallback search path logic"}},{"before":"ff02edf0dafc300af7906922a7a5bae4b6c4d894","after":null,"ref":"refs/heads/ci-master-only","pushedAt":"2024-04-01T17:09:39.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"}},{"before":null,"after":"ff02edf0dafc300af7906922a7a5bae4b6c4d894","ref":"refs/heads/ci-master-only","pushedAt":"2024-04-01T17:03:06.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"CI: Run jobs on master branch and pull requests only\n\nThis is to avoid duplicated runs as soon as a pull request is opened.\nPlease open a pull request to get the CI started!","shortMessageHtmlLink":"CI: Run jobs on master branch and pull requests only"}},{"before":"ffa17cdd859df2c25f2e44485666c1e334e239a4","after":"5730150dde5067fd6685942366a46f9ae29640f2","ref":"refs/heads/ci-mswin","pushedAt":"2024-04-01T16:36:44.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"CI: Add a CI run on mswin build tools","shortMessageHtmlLink":"CI: Add a CI run on mswin build tools"}},{"before":"9fc71778bae293b2c276470630c73e9952aa1b1e","after":"ffa17cdd859df2c25f2e44485666c1e334e239a4","ref":"refs/heads/ci-mswin","pushedAt":"2024-04-01T16:22:01.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"CI: Add a CI run on mswin build tools","shortMessageHtmlLink":"CI: Add a CI run on mswin build tools"}},{"before":null,"after":"9fc71778bae293b2c276470630c73e9952aa1b1e","ref":"refs/heads/ci-mswin","pushedAt":"2024-04-01T16:20:31.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"CI: Add a CI run on mswin build tools","shortMessageHtmlLink":"CI: Add a CI run on mswin build tools"}},{"before":"15ece3b3fdf91f2a77150a2ef7238caa8f88cf12","after":null,"ref":"refs/heads/ci-gcstress","pushedAt":"2024-04-01T11:33:40.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"}},{"before":"95116862f22957af0575878672cce6c74e53346f","after":"15ece3b3fdf91f2a77150a2ef7238caa8f88cf12","ref":"refs/heads/ci-gcstress","pushedAt":"2024-04-01T11:32:40.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"CI: Add a GC.stress run to our CI","shortMessageHtmlLink":"CI: Add a GC.stress run to our CI"}},{"before":"fab6beecda1103f813b305b912f63634c3ef7516","after":"95116862f22957af0575878672cce6c74e53346f","ref":"refs/heads/ci-gcstress","pushedAt":"2024-04-01T11:31:09.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"CI: Add a GC.stress run to our CI","shortMessageHtmlLink":"CI: Add a GC.stress run to our CI"}},{"before":"32328350d9b55efdb7ca906d9f723a2630706225","after":"fab6beecda1103f813b305b912f63634c3ef7516","ref":"refs/heads/ci-gcstress","pushedAt":"2024-03-31T15:24:26.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"CI: Add a GC.stress run to our CI","shortMessageHtmlLink":"CI: Add a GC.stress run to our CI"}},{"before":"17bfeb68fb53b5d8bd8a5a9dde63b25c5d02a46d","after":"32328350d9b55efdb7ca906d9f723a2630706225","ref":"refs/heads/ci-gcstress","pushedAt":"2024-03-31T15:24:00.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"CI: Add a GC.stress run to our CI","shortMessageHtmlLink":"CI: Add a GC.stress run to our CI"}},{"before":"7e8b7251994fe2b963ab39a49fa8d625597f082c","after":"17bfeb68fb53b5d8bd8a5a9dde63b25c5d02a46d","ref":"refs/heads/ci-gcstress","pushedAt":"2024-03-31T15:22:40.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"CI: Add a GC.stress run to our CI","shortMessageHtmlLink":"CI: Add a GC.stress run to our CI"}},{"before":"46d0b4b12436ff1f824335970a3958b9167b87b4","after":"7e8b7251994fe2b963ab39a49fa8d625597f082c","ref":"refs/heads/ci-gcstress","pushedAt":"2024-03-31T14:47:43.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"CI: Add a GC.stress run to our CI","shortMessageHtmlLink":"CI: Add a GC.stress run to our CI"}},{"before":"81add6e894b0b8f11fd1357b25454fdad3a452f1","after":"46d0b4b12436ff1f824335970a3958b9167b87b4","ref":"refs/heads/ci-gcstress","pushedAt":"2024-03-31T14:46:38.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"CI: Add a GC.stress run to our CI","shortMessageHtmlLink":"CI: Add a GC.stress run to our CI"}},{"before":"e349af66b5f27b90bdb1c2ef713c503cc54a9295","after":"81add6e894b0b8f11fd1357b25454fdad3a452f1","ref":"refs/heads/ci-gcstress","pushedAt":"2024-03-31T14:45:58.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"CI: Add a GC.stress run to our CI","shortMessageHtmlLink":"CI: Add a GC.stress run to our CI"}},{"before":"86d1363e58e6d76bc3e4e190cd8a770d9cdcd29d","after":"e349af66b5f27b90bdb1c2ef713c503cc54a9295","ref":"refs/heads/ci-gcstress","pushedAt":"2024-03-31T14:34:27.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"CI: Add a GC.stress run to our CI","shortMessageHtmlLink":"CI: Add a GC.stress run to our CI"}},{"before":null,"after":"86d1363e58e6d76bc3e4e190cd8a770d9cdcd29d","ref":"refs/heads/ci-gcstress","pushedAt":"2024-03-31T11:29:12.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"CI: Add a GC.stress run to our CI","shortMessageHtmlLink":"CI: Add a GC.stress run to our CI"}},{"before":"a7aa25eae83ffe34821b993fc62fa582013f1a4c","after":null,"ref":"refs/heads/fix-gcstress","pushedAt":"2024-03-31T11:23:23.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"}},{"before":null,"after":"a7aa25eae83ffe34821b993fc62fa582013f1a4c","ref":"refs/heads/fix-gcstress","pushedAt":"2024-03-31T11:11:52.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"larskanis","name":"Lars Kanis","path":"/larskanis","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/176234?s=80&v=4"},"commit":{"message":"Fix a very unlikely GC bug when using a callback block\n\nThis could happen, when the Proc object created by rb_block_proc() is GC'ed before the call is executed.\nPractically this is very unlikely unless called with GC.stress=true .\n\nIt can easily be fixed, by returning the Proc object and keeping it in a local variable while the call is executed.\n\nWhen running the test suite with GC.stress=true then it failed like so:\nFailures:\n\n 1) Callback struct by value parameter\n Failure/Error:\n LibTest.testCallbackTrV(s) do |struct|\n s2[:s8] = struct[:s8]\n s2[:f32] = struct[:f32]\n s2[:s32] = struct[:s32]\n end\n\n NoMethodError:\n undefined method `call' for an instance of FFI::MemoryPointer\n ./spec/ffi/callback_spec.rb:312:in `testCallbackTrV'\n ./spec/ffi/callback_spec.rb:312:in `block (2 levels) in '\n\n 2) Callback with struct by reference argument\n Failure/Error: LibTest.testCallbackYrV(magic) { |i| v = i }\n\n NoMethodError:\n undefined method `call' for an instance of FFI::Pointer\n ./spec/ffi/callback_spec.rb:802:in `testCallbackYrV'\n ./spec/ffi/callback_spec.rb:802:in `block (2 levels) in '\n\n 3) Callback with struct by reference argument with nil value\n Failure/Error: LibTest.testCallbackYrV(nil) { |i| v = i }\n\n NoMethodError:\n undefined method `call' for an instance of CallbackWithSpecs::LibTest::S8F32S32\n ./spec/ffi/callback_spec.rb:809:in `testCallbackYrV'\n ./spec/ffi/callback_spec.rb:809:in `block (2 levels) in '\n\nFinished in 100 minutes 21 seconds (files took 0.56651 seconds to load)\n5014 examples, 3 failures","shortMessageHtmlLink":"Fix a very unlikely GC bug when using a callback block"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEOWh98QA","startCursor":null,"endCursor":null}},"title":"Activity ยท larskanis/ffi"}