[#395238] rubygem: ispunity (unite all your internet connections) — Arun Tomar <tomar.arun@...>

Dear friends,

12 messages 2012/05/01

[#395250] Overwriting one Ruby array or arrays with another — Craig Law <lists@...>

Hi

14 messages 2012/05/02

[#395258] array of strings - finding letter combinations — "Sebastjan H." <lists@...>

Hi All,

16 messages 2012/05/02

[#395357] Why Enumerator#next does not return more than one value? — Földes László <lists@...>

If I have an Enumerator which yields elements of a mathematical series

10 messages 2012/05/07

[#395373] How to use Data_Wrap_Struct to assign the DATA VALUE to an exsiting Ruby object? — Iñaki Baz Castillo <ibc@...>

Hi, my code receives an arbitrary klass name (provided by the user)

8 messages 2012/05/07

[#395429] passing via instance variable or regular () — sam jam <lists@...>

def first

10 messages 2012/05/10

[#395463] I'm looking for a Metaprogramming Project — Phil Stone <lists@...>

Hello,

19 messages 2012/05/11

[#395548] A million reasons why Encoding was a mistake — Marc Heiler <lists@...>

Newcomer wants to try Ruby.

15 messages 2012/05/15
[#395561] Re: A million reasons why Encoding was a mistake — Ryan Davis <ryand-ruby@...> 2012/05/15

[#395595] Re: A million reasons why Encoding was a mistake — Brian Candler <lists@...> 2012/05/16

I will add that the OP is not entirely alone in his opinion.

[#395551] How to ensure that a block runs entirely after other threads? (Thread.exclusive does not "work") — Iñaki Baz Castillo <ibc@...>

Hi, I expected that in the following example code, thread t1 would not

8 messages 2012/05/15

[#395575] GUI with ruby on windows — David Acosta <lists@...>

hello friends, i am a begginer and i have a litlle question, how can i

17 messages 2012/05/16

[#395604] what is going wrong here? — roob noob <lists@...>

Notice the initialization of both classes in each of the examples, if

20 messages 2012/05/16

[#395646] rb_gc_register_address() or rb_gc_mark()? — Iñaki Baz Castillo <ibc@...>

Hi, I've bad experiences with rb_gc_register_address(), it does never

16 messages 2012/05/17

[#395686] reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...>

Hi,

19 messages 2012/05/18
[#395694] Re: reading from and writing to a Unicode encoded file — Regis d'Aubarede <lists@...> 2012/05/18

Hello,

[#395697] Re: reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...> 2012/05/18

Regis d'Aubarede wrote in post #1061272:

[#395698] Re: reading from and writing to a Unicode encoded file — Regis d'Aubarede <lists@...> 2012/05/18

Sebastjan H. wrote in post #1061276:

[#395699] Re: reading from and writing to a Unicode encoded file — "Sebastjan H." <lists@...> 2012/05/18

Regis d'Aubarede wrote in post #1061277:

[#395750] Re: reading from and writing to a Unicode encoded file - issues when using Shoes — "Sebastjan H." <lists@...> 2012/05/21

Hi,

[#395754] Re: reading from and writing to a Unicode encoded file - issues when using Shoes — "Sebastjan H." <lists@...> 2012/05/21

Sebastjan H. wrote in post #1061483:

[#395740] ? Ruby through CGI and Rails — Shaun Lloyd <list@...>

Hi everybody,

22 messages 2012/05/21
[#395764] Re: Ruby through CGI and Rails — Brian Candler <lists@...> 2012/05/21

Shaun Lloyd wrote in post #1061455:

[#395786] Re: Ruby through CGI and Rails — Shaun Lloyd <list@...> 2012/05/22

On 22/05/12 03:37, Brian Candler wrote:

[#395838] Re: Ruby through CGI and Rails — Brian Candler <lists@...> 2012/05/23

Shaun Lloyd wrote in post #1061602:

[#395787] Changing self class from inside a method?? — David Madison <lists@...>

Let's start off with the assumption I want a method that allows an

10 messages 2012/05/22

[#395841] Memory-efficient set of Fixnums — George Dupre <lists@...>

Hi,

25 messages 2012/05/23

[#395883] looking for a ruby idiom : r=foo; return r if r — botp <botpena@...>

Hi All,

11 messages 2012/05/24

[#395966] Am I justified to use a global variable if it must be used in all scopes? — Phil Stone <lists@...>

Hello,

12 messages 2012/05/27

[#396010] does this leak more than the size of the string via timing side channels — rooby shoez <lists@...>

string1 = "string"

16 messages 2012/05/29

[#396038] Is it possible to avoid longjmp in exceptions, Thread#kill, exit(), signals? — Iñaki Baz Castillo <ibc@...>

Hi, my Ruby C extension runs a C loop (libuv) without GVL. At some

8 messages 2012/05/29

Re: [C ext and GVL] Why UBF() is called even if Ruby traps signals ??

From: Iñaki Baz Castillo <ibc@...>
Date: 2012-05-22 00:31:57 UTC
List: ruby-talk #395782
2012/5/22 Eric Wong <normalperson@yhbt.net>:
> I=C3=B1aki Baz Castillo <ibc@aliax.net> wrote:

>> After experiments, the ubf() is called in those cases:
>>
>> 1) The thread running the blocking region is killed with Thread#kill.
>>
>> 2) An interrupt for which trap(SIGNAL_NAME, "SIG_INT") has NOT been
>> set arrives while the process is blocked in the blocking region. If
>> the signal has a handler in Ruby land then ubf() is always called(
>> regardless the trap handler will terminate the program or not !!!).
>
> Yes, otherwise for a single-threaded Ruby application, signal handlers
> have only one thread to fire in (so it needs to interrupt uv_run()).

Therefore I cannot use the ubf() for nothing. Typicall my code will be
single thread (see explanation below please).



>> Badly, in any of those cases, if
>> rb_thread_interrupted(rb_thread_current()) is called within the ubf()
>> function it returns false, so honestly I have no idea of =C2=A0how to re=
act
>> when my ubf() is called. If it's due to a signal I want it to be
>> treated in Ruby land. If it's a Thread#kill then I need to do my stuff
>> within the ubf() function. I see no way.
>
> With the self-pipe trick, your ubf() will probably just be:
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0/* write one \0 byte */
> =C2=A0 =C2=A0 =C2=A0 =C2=A0write(pipe_wfd, "", 1);
>
> Where the other end of that pipe is being watched by uv_run()
> (installed like any other IO object you're watching for).


But that's not my problem. In fact, I have a mechanism to communicate
with UV loop at any time safely from any thread:

  uv_async_send()   (thread safe)

So from the ubf() function I have no problem in telling UV "please do
this now or in your next instant iteration". My problem is: what to
say?

1) If ubf() has been called from Thread#kill then I need to run a
function that closes all the active UV handlers so uv_run() exits.

2) If ubf() has been called due to a signal receipt, I don't want
uv_run() to exit. Instead the signal wakeups the UV loop and generates
an iteration in which I call to rb_check_interrupts() for handling the
signal in Ruby land and I'm happy. But the ubf() has been called !!!

So the problem is that when a signal is received, it makes the ubf()
function to be called and, at that point, I have no way to know,
within the ubf() function, whether it has been called by Thread#kill
or by a received signal.


Thanks a lot.



--=20
I=C3=B1aki Baz Castillo
<ibc@aliax.net>

In This Thread