Skip to content
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
3 commits merged into from
Sep 10, 2010
Merged

ruby examples #1

3 commits merged into from
Sep 10, 2010

Conversation

mlc
Copy link
Contributor

@mlc mlc commented Sep 8, 2010

Hello,

I ported some of the examples to Ruby (using the ffi-rzmq bindings). Let me know if you have any questions.

cheers,
mlc

@hintjens
Copy link
Contributor

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>
sappo pushed a commit that referenced this pull request Mar 30, 2018
从booksbyus/zguide来源处更新代码
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
sappo pushed a commit that referenced this pull request Oct 23, 2020
This pull request was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants