-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ruby examples #1
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Thanks! I've merged your changes back into the repository. |
hintjens
pushed a commit
that referenced
this pull request
Jan 7, 2013
Update examples/C#/lbbroker.cs
hintjens
pushed a commit
that referenced
this pull request
Mar 13, 2014
itavy
added a commit
to itavy/zguide
that referenced
this pull request
Feb 24, 2015
Signed-off-by: Octavian Ionescu <itavyg@gmail.com>
rfarnham
added a commit
to rfarnham/zguide
that referenced
this pull request
May 22, 2020
It is important to set both ends of the self pipe as nonblocking, otherwise the signal handler might block on the `write` call and the process will deadlock. Example: ``` (lldb) bt * thread booksbyus#1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP * frame #0: 0x00007fff5f09ff46 libsystem_kernel.dylib`write + 10 frame booksbyus#1: 0x000000010f8f9cd2 interrupt`s_signal_handler(signal_value=2) at interrupt.c:20:12 frame booksbyus#2: 0x00007fff5f152b5d libsystem_platform.dylib`_sigtramp + 29 frame booksbyus#3: 0x000000010f8f981a interrupt`burn_cpu at interrupt.c:44:3 frame booksbyus#4: 0x000000010f8f9b60 interrupt`main at interrupt.c:114:23 frame booksbyus#5: 0x00007fff5ef673d5 libdyld.dylib`start + 1 frame booksbyus#6: 0x00007fff5ef673d5 libdyld.dylib`start + 1 (lldb) f 1 frame booksbyus#1: 0x000000010f8f9cd2 interrupt`s_signal_handler(signal_value=2) at interrupt.c:20:12 17 #define S_ERROR_MSG "Error while writing to self-pipe.\n" 18 static int s_fd; 19 static void s_signal_handler(int signal_value) { -> 20 int rc = write(s_fd, S_NOTIFY_MSG, sizeof(S_NOTIFY_MSG)); 21 if (rc != sizeof(S_NOTIFY_MSG)) { 22 write(STDOUT_FILENO, S_ERROR_MSG, sizeof(S_ERROR_MSG) - 1); 23 perror("error writing\n"); ``` Original code was buggy, as it did not use the loop variable `i`: ``` for (int i = 0; i < 2; i++) { int flags = fcntl(pipefds[0], F_GETFL, 0); if (flags < 0) { perror ("fcntl(F_GETFL)"); exit(1); } rc = fcntl (pipefds[0], F_SETFL, flags | O_NONBLOCK); if (rc != 0) { perror ("fcntl(F_SETFL)"); exit(1); } } ``` The loop was erroneously removed in this commit booksbyus@aebc4b5
rfarnham
added a commit
to rfarnham/zguide
that referenced
this pull request
May 22, 2020
It is important to set both ends of the self pipe as nonblocking, otherwise the signal handler might block on the `write` call and the process will deadlock. Example: ``` (lldb) bt * thread booksbyus#1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP * frame #0: 0x00007fff5f09ff46 libsystem_kernel.dylib`write + 10 frame booksbyus#1: 0x000000010f8f9cd2 interrupt`s_signal_handler(signal_value=2) at interrupt.c:20:12 frame booksbyus#2: 0x00007fff5f152b5d libsystem_platform.dylib`_sigtramp + 29 frame booksbyus#3: 0x000000010f8f981a interrupt`burn_cpu at interrupt.c:44:3 frame booksbyus#4: 0x000000010f8f9b60 interrupt`main at interrupt.c:114:23 frame booksbyus#5: 0x00007fff5ef673d5 libdyld.dylib`start + 1 frame booksbyus#6: 0x00007fff5ef673d5 libdyld.dylib`start + 1 (lldb) f 1 frame booksbyus#1: 0x000000010f8f9cd2 interrupt`s_signal_handler(signal_value=2) at interrupt.c:20:12 17 #define S_ERROR_MSG "Error while writing to self-pipe.\n" 18 static int s_fd; 19 static void s_signal_handler(int signal_value) { -> 20 int rc = write(s_fd, S_NOTIFY_MSG, sizeof(S_NOTIFY_MSG)); 21 if (rc != sizeof(S_NOTIFY_MSG)) { 22 write(STDOUT_FILENO, S_ERROR_MSG, sizeof(S_ERROR_MSG) - 1); 23 perror("error writing\n"); ``` Original code was buggy, as it did not use the loop variable `i`: ``` for (int i = 0; i < 2; i++) { int flags = fcntl(pipefds[0], F_GETFL, 0); if (flags < 0) { perror ("fcntl(F_GETFL)"); exit(1); } rc = fcntl (pipefds[0], F_SETFL, flags | O_NONBLOCK); if (rc != 0) { perror ("fcntl(F_SETFL)"); exit(1); } } ``` The loop was erroneously removed in this commit booksbyus@aebc4b5
This pull request was closed.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hello,
I ported some of the examples to Ruby (using the ffi-rzmq bindings). Let me know if you have any questions.
cheers,
mlc