{"id":19602349,"url":"https://github.com/scottlamb/sigsafe","last_synced_at":"2025-04-27T17:32:14.700Z","repository":{"id":82258128,"uuid":"61141546","full_name":"scottlamb/sigsafe","owner":"scottlamb","description":"C library for safely, reliably, and promptly handling signals delivered to specific threads without significant overhead","archived":false,"fork":false,"pushed_at":"2016-06-14T17:16:49.000Z","size":957,"stargazers_count":5,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-05T01:51:12.480Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scottlamb.png","metadata":{"files":{"readme":"README","changelog":"CHANGES","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-06-14T17:16:05.000Z","updated_at":"2024-02-08T09:21:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"d701ced9-c29c-47d2-9514-a81f289dfcfb","html_url":"https://github.com/scottlamb/sigsafe","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scottlamb%2Fsigsafe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scottlamb%2Fsigsafe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scottlamb%2Fsigsafe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scottlamb%2Fsigsafe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scottlamb","download_url":"https://codeload.github.com/scottlamb/sigsafe/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251178005,"owners_count":21548144,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T09:23:37.901Z","updated_at":"2025-04-27T17:32:14.694Z","avatar_url":"https://github.com/scottlamb.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"$Id$\nScott Lamb \u003cslamb@slamb.org\u003e\n\n\nWHAT IS THIS?\n=============\n\nsigsafe is a C library for safely, reliably, and promptly handling signals\ndelivered to specific threads without significant overhead. This is a common\nand challenging problem, and sigsafe can help. You'll find details in the\nHTML documentation, either here from api/index.html or at:\n\n    \u003chttp://www.slamb.org/projects/sigsafe/api/\u003e\n\nsigsafe includes code, documentation, a performance benchmark, and a\ncorrectness tester that exhaustively searches for race conditions with the\nptrace(2) facility.\n\nsigsafe is available for several platforms.\n\nsigsafe is released under the MIT license.\n\n\nWHAT'S THE CATCH?\n=================\n\nUnfortunately, sigsafe requires writing assembly for each platform - platform\nbeing a combination of operating system and architecture. So far, it has been\nported to:\n\n- Darwin/ppc\n- FreeBSD/alpha\n- FreeBSD/x86\n- Linux/alpha\n- Linux/ia64\n- Linux/x86\n- Linux/x86_64\n- NetBSD/x86\n- SunOS/sparc\n- SunOS/x86\n- Tru64/alpha\n\nI also have a HP-UX/PA-RISC machine available to me that I've never gotten\naround to trying.\n\nIf there's another platform you're looking for, see the porting section\nof the manual or give me access to one.\n\n\nWHAT'S INCLUDED?\n================\n\n- the sigsafe wrappers and control functions themselves\n\n- doxygen-generated API documentation\n\n- a performance benchmark\n  On the platforms I've tested so far, sigsafe performance is comparable to\n  raw system call performance. But don't take my word for it - run the test\n  yourself. It's easy!\n\n- a correctness test - it exhaustively searches for race conditions by\n  using process tracing to deliver the signal between each instruction\n  boundary.\n\n\nHOW DO I COMPILE IT?\n====================\n\nI used the scons build system avaible from \u003chttp://www.scons.org/\u003e. It's\nPython-based, so you will also need to install Python if you don't have it\nalready. (Or you could manually compile sigsafe; there aren't very many\nfiles.) I apologize for the additional dependency, but scons is completely\nsuperior to make+m4+sh+autoconf+automake. If I spent my time with an inferior\nbuild system, I couldn't spend it on more important things like improving the\nsoftware itself.\n\nAssuming you've installed scons, type:\n\n    $ scons\n\nat the top level. It will produce everything in a build-XXX-YYY-ZZZ directory.\nRun the microbenchmark to see that performance is acceptable and the\ncorrectness tester to see that sigsafe works (and the other ways don't).\nWhen you're satisfied, type:\n\n    $ sudo scons install\n\nIf you are having trouble, you can compile with debugging support:\n\n    $ scons debug=yes\n\nSee also the help:\n\n    $ scons --help\n\n\nHOW DO I ADD A SYSTEM CALL?\n===========================\n\nIn most cases, it's quite easy to add a new system call to an existing\nplatform. You just need to:\n\n- add the prototype to sigsafe.h.\n- add it to the syscalls.h list for your platform.\n\nSome system calls are emulated - actually library functions implemented in\nterms of other, raw system calls. These are a bit more work. If it's not\nobvious how you could implement in terms of a raw system call, ask around or\ncheck your system's libc source code.\n\n\nWHAT MAY I DO WITH THIS SOFTWARE?\n=================================\n\nThis code is all released under the MIT license. The full license text is\nbelow. The short version is that you may do anything with it you like\n(including selling it) except claiming it as your own. You also must not sue\nme if it doesn't meet your requirements.\n\nThe full license text:\n\nCopyright (C) 2004 Scott Lamb\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscottlamb%2Fsigsafe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscottlamb%2Fsigsafe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscottlamb%2Fsigsafe/lists"}