RE: [classlib][luni] signalis interruptus in hysock

2006-10-31 Thread Fedotov, Alexei A
Geir,
Tanks for your reply!

In code that calls the wrapper for the lowest-level select(), right?
Yes

pollSelectRead()  // loop is here
hysock_select_read()  // return code is propagated
hysock_select()   // EINTR is renamed to
HYPORT_ERROR_SOCKET_INTERRUPTED

I don't understand this - what do you see as the real problem?
Interruption from select due to signals is a fact of life under linux.

This is a good question. 100% agree with your statement. I will try to
reproduce connection failures on Linux right after overcoming my SuSE
Linux problems with running DRLVM. If there are no connection failures,
than there is no problem.


With best regards,
Alexei Fedotov,
Intel Java  XML Engineering

-Original Message-
From: Geir Magnusson Jr. [mailto:[EMAIL PROTECTED]
Sent: Tuesday, October 31, 2006 2:30 AM
To: harmony-dev@incubator.apache.org
Subject: Re: [classlib][luni] signalis interruptus in hysock


Fedotov, Alexei A wrote:
 Geir, All,

 I have examined class library code. It seems that the solution we
 invented (return EINTR, then loop) was always in place. :-)

 Few comments on understanding:
 1. EINTR (=4) is renamed to HYPORT_ERROR_SOCKET_INTERRUPTED (=-9).

Yes, I did that in one place to have it fit into the portlib error code
set.  Someone may have done it in another.

 2. The loop is coded by means of goto select.

In code that calls the wrapper for the lowest-level select(), right?

 3. The same pattern is dupdupduplicated several times.

That's another issue entirely :)


 I have not examined all places, though there could be paths which do
not
 fit the pattern. Honestly, I have examined the only path:

 pollSelectRead() -
 hysock_select_read() -
 hysock_select()

 Summary:
 We can keep this issue open or close  it as won't fix. Meanwhile we
 should look for the real problem.

I don't understand this - what do you see as the real problem?
Interruption from select due to signals is a fact of life under linux.

geir


 With best regards,
 Alexei Fedotov,
 Intel Java  XML Engineering

 -Original Message-
 From: Geir Magnusson Jr. [mailto:[EMAIL PROTECTED]
 Sent: Thursday, October 26, 2006 6:21 PM
 To: harmony-dev@incubator.apache.org
 Subject: Re: [classlib][luni] signalis interruptus in hysock



 Fedotov, Alexei A wrote:
 Geir,

 Do I understand correctly that you suggest the following?

 1. hysock_select as its name says should mimic a behavior of
select,
 i.
 e. return the error code from select without changing it. It's ok
to
 print a rare debug message.
 Yes, that's what I had the other do (and no, I see no reason to
print a
 debug message, as upper layers can print if they find an EINTR)

 2. The correct place for the loop is the module where hysock_select
 is
 called, or, let me be precise, class lib guys are to fix our
 networking
 code.
 My plan is to fix it as fixed the other one.  It turns out that
there
 are several layers between java and the OS...

 geir


 With best regards,
 Alexei Fedotov,
 Intel Java  XML Engineering

 -Original Message-
 From: Geir Magnusson Jr. [mailto:[EMAIL PROTECTED]
 Sent: Wednesday, October 25, 2006 10:01 AM
 To: harmony-dev@incubator.apache.org
 Subject: Re: [classlib][luni] signalis interruptus in hysock



 Weldon Washburn wrote:
 It seems JIRA is down for maintenance.  If HARMONY-1904 is still
 open
 perhaps it makes sense to put a counter in the while (...) {
 select...}
 loop. And after every N loops, print a warning/diagnostic
message.
 For whom and to what end?  Why not just return EINTR (in hysock
 speak)?
 The
 value for N would have to be tuned.  I don't know what the best
 number
 would
 be. Given that 1904 patch is not the final solution, at least a
 diagnostic
 that hints at where the system hangs would be useful.  It might
 make
 sense
 to even print a stack trace.   Also, I agree with Ivan below.
 Signals
 bugs
 are very hard to debug.  And diagnostics can help us all
understand
 the
 corner cases better.
 But so far, no one has shown that the system hangs, or can hang,
 simply
 because we return EINTR

 geir

 On 10/20/06, Ivan Volosyuk [EMAIL PROTECTED] wrote:
 On 10/20/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:
 Ivan Volosyuk wrote:
 Well, I think that the solution is what Geir suggests. One
think
 which
 bothers me is following. EINTR can happen in different places
 and
 the
 situations can be quite rare in some circumstances. It can
lead
 to
 hard to reproduce stability bugs (race conditions).
 Can you give an example?
 Half a year ago, I was working on the problem. Socket operations
 get
 sometimes interrupted. We have found out that it occurs sometime
 after
 GC. It was not quite easy as the application was quite big and
 situation - quite rare.

 Given the fact, that current implementation of monitor
reservation
 code can stop other thread in quite random fashion we should
have
 rock
 solid support of EINTR handling everywhere the select(), poll()
 calls
 is used.

 --
 Ivan
 Intel Enterprise

RE: [classlib][luni] signalis interruptus in hysock

2006-10-30 Thread Fedotov, Alexei A
Geir, All,

I have examined class library code. It seems that the solution we
invented (return EINTR, then loop) was always in place. :-)

Few comments on understanding:
1. EINTR (=4) is renamed to HYPORT_ERROR_SOCKET_INTERRUPTED (=-9).
2. The loop is coded by means of goto select.
3. The same pattern is dupdupduplicated several times.

I have not examined all places, though there could be paths which do not
fit the pattern. Honestly, I have examined the only path:

pollSelectRead() -
hysock_select_read() -
hysock_select()

Summary:
We can keep this issue open or close it as won't fix. Meanwhile we
should look for the real problem.

With best regards,
Alexei Fedotov,
Intel Java  XML Engineering

-Original Message-
From: Geir Magnusson Jr. [mailto:[EMAIL PROTECTED]
Sent: Thursday, October 26, 2006 6:21 PM
To: harmony-dev@incubator.apache.org
Subject: Re: [classlib][luni] signalis interruptus in hysock



Fedotov, Alexei A wrote:
 Geir,

 Do I understand correctly that you suggest the following?

 1. hysock_select as its name says should mimic a behavior of select,
i.
 e. return the error code from select without changing it. It's ok to
 print a rare debug message.

Yes, that's what I had the other do (and no, I see no reason to print a
debug message, as upper layers can print if they find an EINTR)


 2. The correct place for the loop is the module where hysock_select
is
 called, or, let me be precise, class lib guys are to fix our
networking
 code.

My plan is to fix it as fixed the other one.  It turns out that there
are several layers between java and the OS...

geir



 With best regards,
 Alexei Fedotov,
 Intel Java  XML Engineering

 -Original Message-
 From: Geir Magnusson Jr. [mailto:[EMAIL PROTECTED]
 Sent: Wednesday, October 25, 2006 10:01 AM
 To: harmony-dev@incubator.apache.org
 Subject: Re: [classlib][luni] signalis interruptus in hysock



 Weldon Washburn wrote:
 It seems JIRA is down for maintenance.  If HARMONY-1904 is still
open
 perhaps it makes sense to put a counter in the while (...) {
 select...}
 loop. And after every N loops, print a warning/diagnostic message.
 For whom and to what end?  Why not just return EINTR (in hysock
speak)?

 The
 value for N would have to be tuned.  I don't know what the best
 number
 would
 be. Given that 1904 patch is not the final solution, at least a
 diagnostic
 that hints at where the system hangs would be useful.  It might
make
 sense
 to even print a stack trace.   Also, I agree with Ivan below.
 Signals
 bugs
 are very hard to debug.  And diagnostics can help us all understand
 the
 corner cases better.
 But so far, no one has shown that the system hangs, or can hang,
simply
 because we return EINTR

 geir

 On 10/20/06, Ivan Volosyuk [EMAIL PROTECTED] wrote:
 On 10/20/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:

 Ivan Volosyuk wrote:
 Well, I think that the solution is what Geir suggests. One think
 which
 bothers me is following. EINTR can happen in different places
 and
 the
 situations can be quite rare in some circumstances. It can lead
 to
 hard to reproduce stability bugs (race conditions).
 Can you give an example?
 Half a year ago, I was working on the problem. Socket operations
get
 sometimes interrupted. We have found out that it occurs sometime
 after
 GC. It was not quite easy as the application was quite big and
 situation - quite rare.

 Given the fact, that current implementation of monitor reservation
 code can stop other thread in quite random fashion we should have
 rock
 solid support of EINTR handling everywhere the select(), poll()
 calls
 is used.

 --
 Ivan
 Intel Enterprise Solutions Software Division

 We should find a
 way how to test the implementation.
 +1!

 :)

 geir

 -
 Terms of use : http://incubator.apache.org/harmony/mailing.html
 To unsubscribe, e-mail:
[EMAIL PROTECTED]
 For additional commands, e-mail:
 [EMAIL PROTECTED]





Re: [classlib][luni] signalis interruptus in hysock

2006-10-30 Thread Geir Magnusson Jr.


Fedotov, Alexei A wrote:

Geir, All,

I have examined class library code. It seems that the solution we
invented (return EINTR, then loop) was always in place. :-)

Few comments on understanding:
1. EINTR (=4) is renamed to HYPORT_ERROR_SOCKET_INTERRUPTED (=-9).


Yes, I did that in one place to have it fit into the portlib error code 
set.  Someone may have done it in another.



2. The loop is coded by means of goto select.


In code that calls the wrapper for the lowest-level select(), right?


3. The same pattern is dupdupduplicated several times.


That's another issue entirely :)



I have not examined all places, though there could be paths which do not
fit the pattern. Honestly, I have examined the only path:

pollSelectRead() -
hysock_select_read() -
hysock_select()

Summary:
We can keep this issue open or close  it as won't fix. Meanwhile we
should look for the real problem.


I don't understand this - what do you see as the real problem? 
Interruption from select due to signals is a fact of life under linux.


geir



With best regards,
Alexei Fedotov,
Intel Java  XML Engineering


-Original Message-
From: Geir Magnusson Jr. [mailto:[EMAIL PROTECTED]
Sent: Thursday, October 26, 2006 6:21 PM
To: harmony-dev@incubator.apache.org
Subject: Re: [classlib][luni] signalis interruptus in hysock



Fedotov, Alexei A wrote:

Geir,

Do I understand correctly that you suggest the following?

1. hysock_select as its name says should mimic a behavior of select,

i.

e. return the error code from select without changing it. It's ok to
print a rare debug message.

Yes, that's what I had the other do (and no, I see no reason to print a
debug message, as upper layers can print if they find an EINTR)


2. The correct place for the loop is the module where hysock_select

is

called, or, let me be precise, class lib guys are to fix our

networking

code.

My plan is to fix it as fixed the other one.  It turns out that there
are several layers between java and the OS...

geir



With best regards,
Alexei Fedotov,
Intel Java  XML Engineering


-Original Message-
From: Geir Magnusson Jr. [mailto:[EMAIL PROTECTED]
Sent: Wednesday, October 25, 2006 10:01 AM
To: harmony-dev@incubator.apache.org
Subject: Re: [classlib][luni] signalis interruptus in hysock



Weldon Washburn wrote:

It seems JIRA is down for maintenance.  If HARMONY-1904 is still

open

perhaps it makes sense to put a counter in the while (...) {

select...}

loop. And after every N loops, print a warning/diagnostic message.

For whom and to what end?  Why not just return EINTR (in hysock

speak)?

The
value for N would have to be tuned.  I don't know what the best

number

would
be. Given that 1904 patch is not the final solution, at least a

diagnostic

that hints at where the system hangs would be useful.  It might

make

sense

to even print a stack trace.   Also, I agree with Ivan below.

Signals

bugs

are very hard to debug.  And diagnostics can help us all understand

the

corner cases better.

But so far, no one has shown that the system hangs, or can hang,

simply

because we return EINTR

geir


On 10/20/06, Ivan Volosyuk [EMAIL PROTECTED] wrote:

On 10/20/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:

Ivan Volosyuk wrote:

Well, I think that the solution is what Geir suggests. One think

which

bothers me is following. EINTR can happen in different places

and

the

situations can be quite rare in some circumstances. It can lead

to

hard to reproduce stability bugs (race conditions).

Can you give an example?

Half a year ago, I was working on the problem. Socket operations

get

sometimes interrupted. We have found out that it occurs sometime

after

GC. It was not quite easy as the application was quite big and
situation - quite rare.

Given the fact, that current implementation of monitor reservation
code can stop other thread in quite random fashion we should have

rock

solid support of EINTR handling everywhere the select(), poll()

calls

is used.

--
Ivan
Intel Enterprise Solutions Software Division


We should find a
way how to test the implementation.

+1!

:)

geir

-

Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail:

[EMAIL PROTECTED]

For additional commands, e-mail:

[EMAIL PROTECTED]




Re: [classlib][luni] signalis interruptus in hysock

2006-10-26 Thread Ivan Volosyuk

On 10/25/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:



Fedotov, Alexei A wrote:
 Guys,

 Could you please help me to understand the following?

 1. Is HARMONY-1904 actually a duplicate of my HARMONY-1879?

scanning quickly, I don't think so.

 2. Ivan, do I remember correctly that you've already fixed that bug once
 when debugging Eclipse long run failures? Where is that patch?

this bug arose when the new TM was added, which uses signals much more
aggressively.

geir


Well, the bug exists quite a long time and it was reproducible before.
Older TM also used signals for stopping threads for GC. The patch I
have created was not integrated before as it was almost the same as
the current suggested patch. The only difference was that it handled
timeout correctly (for other unixes).
--
Ivan




 Thank you in advance.

 With best regards,
 Alexei Fedotov,
 Intel Java  XML Engineering

 -Original Message-
 From: Weldon Washburn [mailto:[EMAIL PROTECTED]
 Sent: Wednesday, October 25, 2006 5:36 PM
 To: harmony-dev@incubator.apache.org; [EMAIL PROTECTED]
 Subject: Re: [classlib][luni] signalis interruptus in hysock

 On 10/24/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:


 Weldon Washburn wrote:
 It seems JIRA is down for maintenance.  If HARMONY-1904 is still
 open
 perhaps it makes sense to put a counter in the while (...) {
 select...}
 loop. And after every N loops, print a warning/diagnostic message.
 For whom and to what end?  Why not just return EINTR (in hysock
 speak)?
 The
 value for N would have to be tuned.  I don't know what the best
 number
 would
 be. Given that 1904 patch is not the final solution, at least a
 diagnostic
 that hints at where the system hangs would be useful.  It might
 make
 sense
 to even print a stack trace.   Also, I agree with Ivan below.
 Signals
 bugs
 are very hard to debug.  And diagnostics can help us all understand
 the
 corner cases better.
 But so far, no one has shown that the system hangs, or can hang,
 simply
 because we return EINTR

 Sorry for not being clear.  I was reacting to the patch in 1904 itself.
 Not
 the bigger issue of fixing the upper layers to comprehend EINTR.  My
 understanding is that this patch does not fix the problem.  This patch
 does
 not return EINTR.  If for whatever reason this patch is committed, I
 recommend adding the above diagnostic code so that we don't dig
 ourselves
 an
 even deeper hole.

 If it is decided 1904 should not be committed, it might make sense to
 close it with  won't fix.

 geir
 On 10/20/06, Ivan Volosyuk [EMAIL PROTECTED] wrote:
 On 10/20/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:

 Ivan Volosyuk wrote:
 Well, I think that the solution is what Geir suggests. One
 think
 which
 bothers me is following. EINTR can happen in different places
 and
 the
 situations can be quite rare in some circumstances. It can
 lead to
 hard to reproduce stability bugs (race conditions).
 Can you give an example?
 Half a year ago, I was working on the problem. Socket operations
 get
 sometimes interrupted. We have found out that it occurs sometime
 after
 GC. It was not quite easy as the application was quite big and
 situation - quite rare.

 Given the fact, that current implementation of monitor reservation
 code can stop other thread in quite random fashion we should have
 rock
 solid support of EINTR handling everywhere the select(), poll()
 calls
 is used.

 --
 Ivan
 Intel Enterprise Solutions Software Division

 We should find a
 way how to test the implementation.
 +1!

 :)

 geir


RE: [classlib][luni] signalis interruptus in hysock

2006-10-26 Thread Fedotov, Alexei A
Geir,

Do I understand correctly that you suggest the following?

1. hysock_select as its name says should mimic a behavior of select, i.
e. return the error code from select without changing it. It's ok to
print a rare debug message.

2. The correct place for the loop is the module where hysock_select is
called, or, let me be precise, class lib guys are to fix our networking
code.


With best regards,
Alexei Fedotov,
Intel Java  XML Engineering

-Original Message-
From: Geir Magnusson Jr. [mailto:[EMAIL PROTECTED]
Sent: Wednesday, October 25, 2006 10:01 AM
To: harmony-dev@incubator.apache.org
Subject: Re: [classlib][luni] signalis interruptus in hysock



Weldon Washburn wrote:
 It seems JIRA is down for maintenance.  If HARMONY-1904 is still open
 perhaps it makes sense to put a counter in the while (...) {
select...}
 loop. And after every N loops, print a warning/diagnostic message.

For whom and to what end?  Why not just return EINTR (in hysock speak)?

 The
 value for N would have to be tuned.  I don't know what the best
number
 would
 be. Given that 1904 patch is not the final solution, at least a
diagnostic
 that hints at where the system hangs would be useful.  It might make
sense
 to even print a stack trace.   Also, I agree with Ivan below.
Signals
bugs
 are very hard to debug.  And diagnostics can help us all understand
the
 corner cases better.

But so far, no one has shown that the system hangs, or can hang, simply
because we return EINTR

geir


 On 10/20/06, Ivan Volosyuk [EMAIL PROTECTED] wrote:

 On 10/20/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:
 
 
  Ivan Volosyuk wrote:
   Well, I think that the solution is what Geir suggests. One think
 which
   bothers me is following. EINTR can happen in different places
and
the
   situations can be quite rare in some circumstances. It can lead
to
   hard to reproduce stability bugs (race conditions).
 
  Can you give an example?

 Half a year ago, I was working on the problem. Socket operations get
 sometimes interrupted. We have found out that it occurs sometime
after
 GC. It was not quite easy as the application was quite big and
 situation - quite rare.

 Given the fact, that current implementation of monitor reservation
 code can stop other thread in quite random fashion we should have
rock
 solid support of EINTR handling everywhere the select(), poll()
calls
 is used.

 --
 Ivan
 Intel Enterprise Solutions Software Division

 
   We should find a
   way how to test the implementation.
 
  +1!
 
  :)
 
  geir


-
 Terms of use : http://incubator.apache.org/harmony/mailing.html
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail:
[EMAIL PROTECTED]






Re: [classlib][luni] signalis interruptus in hysock

2006-10-26 Thread Geir Magnusson Jr.
Happy to look at that other patch, but I'm no one has convinced me that 
handling the EINTR like I've done already the first time is a bad idea...


and I'm convinced that just swallowing it in the lowest level of the 
library is a bad idea.


geir


Ivan Volosyuk wrote:

On 10/25/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:



Fedotov, Alexei A wrote:
 Guys,

 Could you please help me to understand the following?

 1. Is HARMONY-1904 actually a duplicate of my HARMONY-1879?

scanning quickly, I don't think so.

 2. Ivan, do I remember correctly that you've already fixed that bug 
once

 when debugging Eclipse long run failures? Where is that patch?

this bug arose when the new TM was added, which uses signals much more
aggressively.

geir


Well, the bug exists quite a long time and it was reproducible before.
Older TM also used signals for stopping threads for GC. The patch I
have created was not integrated before as it was almost the same as
the current suggested patch. The only difference was that it handled
timeout correctly (for other unixes).
--
Ivan




 Thank you in advance.

 With best regards,
 Alexei Fedotov,
 Intel Java  XML Engineering

 -Original Message-
 From: Weldon Washburn [mailto:[EMAIL PROTECTED]
 Sent: Wednesday, October 25, 2006 5:36 PM
 To: harmony-dev@incubator.apache.org; [EMAIL PROTECTED]
 Subject: Re: [classlib][luni] signalis interruptus in hysock

 On 10/24/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:


 Weldon Washburn wrote:
 It seems JIRA is down for maintenance.  If HARMONY-1904 is still
 open
 perhaps it makes sense to put a counter in the while (...) {
 select...}
 loop. And after every N loops, print a warning/diagnostic message.
 For whom and to what end?  Why not just return EINTR (in hysock
 speak)?
 The
 value for N would have to be tuned.  I don't know what the best
 number
 would
 be. Given that 1904 patch is not the final solution, at least a
 diagnostic
 that hints at where the system hangs would be useful.  It might
 make
 sense
 to even print a stack trace.   Also, I agree with Ivan below.
 Signals
 bugs
 are very hard to debug.  And diagnostics can help us all understand
 the
 corner cases better.
 But so far, no one has shown that the system hangs, or can hang,
 simply
 because we return EINTR

 Sorry for not being clear.  I was reacting to the patch in 1904 
itself.

 Not
 the bigger issue of fixing the upper layers to comprehend EINTR.  My
 understanding is that this patch does not fix the problem.  This patch
 does
 not return EINTR.  If for whatever reason this patch is committed, I
 recommend adding the above diagnostic code so that we don't dig
 ourselves
 an
 even deeper hole.

 If it is decided 1904 should not be committed, it might make sense to
 close it with  won't fix.

 geir
 On 10/20/06, Ivan Volosyuk [EMAIL PROTECTED] wrote:
 On 10/20/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:

 Ivan Volosyuk wrote:
 Well, I think that the solution is what Geir suggests. One
 think
 which
 bothers me is following. EINTR can happen in different places
 and
 the
 situations can be quite rare in some circumstances. It can
 lead to
 hard to reproduce stability bugs (race conditions).
 Can you give an example?
 Half a year ago, I was working on the problem. Socket operations
 get
 sometimes interrupted. We have found out that it occurs sometime
 after
 GC. It was not quite easy as the application was quite big and
 situation - quite rare.

 Given the fact, that current implementation of monitor reservation
 code can stop other thread in quite random fashion we should have
 rock
 solid support of EINTR handling everywhere the select(), poll()
 calls
 is used.

 --
 Ivan
 Intel Enterprise Solutions Software Division

 We should find a
 way how to test the implementation.
 +1!

 :)

 geir




Re: [classlib][luni] signalis interruptus in hysock

2006-10-26 Thread Geir Magnusson Jr.



Fedotov, Alexei A wrote:

Geir,

Do I understand correctly that you suggest the following?

1. hysock_select as its name says should mimic a behavior of select, i.
e. return the error code from select without changing it. It's ok to
print a rare debug message.


Yes, that's what I had the other do (and no, I see no reason to print a 
debug message, as upper layers can print if they find an EINTR)




2. The correct place for the loop is the module where hysock_select is
called, or, let me be precise, class lib guys are to fix our networking
code.


My plan is to fix it as fixed the other one.  It turns out that there 
are several layers between java and the OS...


geir




With best regards,
Alexei Fedotov,
Intel Java  XML Engineering


-Original Message-
From: Geir Magnusson Jr. [mailto:[EMAIL PROTECTED]
Sent: Wednesday, October 25, 2006 10:01 AM
To: harmony-dev@incubator.apache.org
Subject: Re: [classlib][luni] signalis interruptus in hysock



Weldon Washburn wrote:

It seems JIRA is down for maintenance.  If HARMONY-1904 is still open
perhaps it makes sense to put a counter in the while (...) {

select...}

loop. And after every N loops, print a warning/diagnostic message.

For whom and to what end?  Why not just return EINTR (in hysock speak)?


The
value for N would have to be tuned.  I don't know what the best

number

would
be. Given that 1904 patch is not the final solution, at least a

diagnostic

that hints at where the system hangs would be useful.  It might make

sense

to even print a stack trace.   Also, I agree with Ivan below.

Signals

bugs

are very hard to debug.  And diagnostics can help us all understand

the

corner cases better.

But so far, no one has shown that the system hangs, or can hang, simply
because we return EINTR

geir


On 10/20/06, Ivan Volosyuk [EMAIL PROTECTED] wrote:

On 10/20/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:


Ivan Volosyuk wrote:

Well, I think that the solution is what Geir suggests. One think

which

bothers me is following. EINTR can happen in different places

and

the

situations can be quite rare in some circumstances. It can lead

to

hard to reproduce stability bugs (race conditions).

Can you give an example?

Half a year ago, I was working on the problem. Socket operations get
sometimes interrupted. We have found out that it occurs sometime

after

GC. It was not quite easy as the application was quite big and
situation - quite rare.

Given the fact, that current implementation of monitor reservation
code can stop other thread in quite random fashion we should have

rock

solid support of EINTR handling everywhere the select(), poll()

calls

is used.

--
Ivan
Intel Enterprise Solutions Software Division


We should find a
way how to test the implementation.

+1!

:)

geir



-

Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail:

[EMAIL PROTECTED]








Re: [classlib][luni] signalis interruptus in hysock

2006-10-25 Thread Geir Magnusson Jr.



Ivan Volosyuk wrote:

On 10/20/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:



Ivan Volosyuk wrote:
 Well, I think that the solution is what Geir suggests. One think which
 bothers me is following. EINTR can happen in different places and the
 situations can be quite rare in some circumstances. It can lead to
 hard to reproduce stability bugs (race conditions).

Can you give an example?


Half a year ago, I was working on the problem. Socket operations get
sometimes interrupted. We have found out that it occurs sometime after
GC. It was not quite easy as the application was quite big and
situation - quite rare.


I believe it is rare, but if the code deals with EINTR correctly, where 
can the race conditions come from?




Given the fact, that current implementation of monitor reservation
code can stop other thread in quite random fashion we should have rock
solid support of EINTR handling everywhere the select(), poll() calls
is used.


Well... yeah.  Not bury it.

geir





Re: [classlib][luni] signalis interruptus in hysock

2006-10-25 Thread Geir Magnusson Jr.



Weldon Washburn wrote:

It seems JIRA is down for maintenance.  If HARMONY-1904 is still open
perhaps it makes sense to put a counter in the while (...) { select...}
loop. And after every N loops, print a warning/diagnostic message.  


For whom and to what end?  Why not just return EINTR (in hysock speak)?


The
value for N would have to be tuned.  I don't know what the best number 
would

be. Given that 1904 patch is not the final solution, at least a diagnostic
that hints at where the system hangs would be useful.  It might make sense
to even print a stack trace.   Also, I agree with Ivan below.  Signals bugs
are very hard to debug.  And diagnostics can help us all understand the
corner cases better.


But so far, no one has shown that the system hangs, or can hang, simply 
because we return EINTR


geir



On 10/20/06, Ivan Volosyuk [EMAIL PROTECTED] wrote:


On 10/20/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:


 Ivan Volosyuk wrote:
  Well, I think that the solution is what Geir suggests. One think 
which

  bothers me is following. EINTR can happen in different places and the
  situations can be quite rare in some circumstances. It can lead to
  hard to reproduce stability bugs (race conditions).

 Can you give an example?

Half a year ago, I was working on the problem. Socket operations get
sometimes interrupted. We have found out that it occurs sometime after
GC. It was not quite easy as the application was quite big and
situation - quite rare.

Given the fact, that current implementation of monitor reservation
code can stop other thread in quite random fashion we should have rock
solid support of EINTR handling everywhere the select(), poll() calls
is used.

--
Ivan
Intel Enterprise Solutions Software Division


  We should find a
  way how to test the implementation.

 +1!

 :)

 geir

-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]







Re: [classlib][luni] signalis interruptus in hysock

2006-10-25 Thread Weldon Washburn

On 10/24/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:




Weldon Washburn wrote:
 It seems JIRA is down for maintenance.  If HARMONY-1904 is still open
 perhaps it makes sense to put a counter in the while (...) { select...}
 loop. And after every N loops, print a warning/diagnostic message.

For whom and to what end?  Why not just return EINTR (in hysock speak)?

 The
 value for N would have to be tuned.  I don't know what the best number
 would
 be. Given that 1904 patch is not the final solution, at least a
diagnostic
 that hints at where the system hangs would be useful.  It might make
sense
 to even print a stack trace.   Also, I agree with Ivan below.  Signals
bugs
 are very hard to debug.  And diagnostics can help us all understand the
 corner cases better.

But so far, no one has shown that the system hangs, or can hang, simply
because we return EINTR



Sorry for not being clear.  I was reacting to the patch in 1904 itself.  Not
the bigger issue of fixing the upper layers to comprehend EINTR.  My
understanding is that this patch does not fix the problem.  This patch does
not return EINTR.  If for whatever reason this patch is committed, I
recommend adding the above diagnostic code so that we don't dig ourselves an
even deeper hole.

If it is decided 1904 should not be committed, it might make sense to
close it with  won't fix.

geir



 On 10/20/06, Ivan Volosyuk [EMAIL PROTECTED] wrote:

 On 10/20/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:
 
 
  Ivan Volosyuk wrote:
   Well, I think that the solution is what Geir suggests. One think
 which
   bothers me is following. EINTR can happen in different places and
the
   situations can be quite rare in some circumstances. It can lead to
   hard to reproduce stability bugs (race conditions).
 
  Can you give an example?

 Half a year ago, I was working on the problem. Socket operations get
 sometimes interrupted. We have found out that it occurs sometime after
 GC. It was not quite easy as the application was quite big and
 situation - quite rare.

 Given the fact, that current implementation of monitor reservation
 code can stop other thread in quite random fashion we should have rock
 solid support of EINTR handling everywhere the select(), poll() calls
 is used.

 --
 Ivan
 Intel Enterprise Solutions Software Division

 
   We should find a
   way how to test the implementation.
 
  +1!
 
  :)
 
  geir

 -
 Terms of use : http://incubator.apache.org/harmony/mailing.html
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]









--
Weldon Washburn
Intel Middleware Products Division


Re: [classlib][luni] signalis interruptus in hysock

2006-10-25 Thread Ivan Volosyuk

On 10/25/06, Weldon Washburn [EMAIL PROTECTED] wrote:

On 10/24/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:



 Weldon Washburn wrote:
  It seems JIRA is down for maintenance.  If HARMONY-1904 is still open
  perhaps it makes sense to put a counter in the while (...) { select...}
  loop. And after every N loops, print a warning/diagnostic message.

 For whom and to what end?  Why not just return EINTR (in hysock speak)?

  The
  value for N would have to be tuned.  I don't know what the best number
  would
  be. Given that 1904 patch is not the final solution, at least a
 diagnostic
  that hints at where the system hangs would be useful.  It might make
 sense
  to even print a stack trace.   Also, I agree with Ivan below.  Signals
 bugs
  are very hard to debug.  And diagnostics can help us all understand the
  corner cases better.

 But so far, no one has shown that the system hangs, or can hang, simply
 because we return EINTR


Sorry for not being clear.  I was reacting to the patch in 1904 itself.  Not
the bigger issue of fixing the upper layers to comprehend EINTR.  My
understanding is that this patch does not fix the problem.  This patch does
not return EINTR.  If for whatever reason this patch is committed, I
recommend adding the above diagnostic code so that we don't dig ourselves an
even deeper hole.

If it is decided 1904 should not be committed, it might make sense to
close it with  won't fix.


I would prefer to close it as fixed when the correct solution will be found.

--
Ivan
Intel Enterprise Solutions Software Division


RE: [classlib][luni] signalis interruptus in hysock

2006-10-25 Thread Fedotov, Alexei A
Guys,

Could you please help me to understand the following?

1. Is HARMONY-1904 actually a duplicate of my HARMONY-1879?
2. Ivan, do I remember correctly that you've already fixed that bug once
when debugging Eclipse long run failures? Where is that patch?

Thank you in advance.

With best regards,
Alexei Fedotov,
Intel Java  XML Engineering

-Original Message-
From: Weldon Washburn [mailto:[EMAIL PROTECTED]
Sent: Wednesday, October 25, 2006 5:36 PM
To: harmony-dev@incubator.apache.org; [EMAIL PROTECTED]
Subject: Re: [classlib][luni] signalis interruptus in hysock

On 10/24/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:



 Weldon Washburn wrote:
  It seems JIRA is down for maintenance.  If HARMONY-1904 is still
open
  perhaps it makes sense to put a counter in the while (...) {
select...}
  loop. And after every N loops, print a warning/diagnostic message.

 For whom and to what end?  Why not just return EINTR (in hysock
speak)?

  The
  value for N would have to be tuned.  I don't know what the best
number
  would
  be. Given that 1904 patch is not the final solution, at least a
 diagnostic
  that hints at where the system hangs would be useful.  It might
make
 sense
  to even print a stack trace.   Also, I agree with Ivan below.
Signals
 bugs
  are very hard to debug.  And diagnostics can help us all understand
the
  corner cases better.

 But so far, no one has shown that the system hangs, or can hang,
simply
 because we return EINTR


Sorry for not being clear.  I was reacting to the patch in 1904 itself.
Not
the bigger issue of fixing the upper layers to comprehend EINTR.  My
understanding is that this patch does not fix the problem.  This patch
does
not return EINTR.  If for whatever reason this patch is committed, I
recommend adding the above diagnostic code so that we don't dig
ourselves
an
even deeper hole.

If it is decided 1904 should not be committed, it might make sense to
close it with  won't fix.

geir

 
  On 10/20/06, Ivan Volosyuk [EMAIL PROTECTED] wrote:
 
  On 10/20/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:
  
  
   Ivan Volosyuk wrote:
Well, I think that the solution is what Geir suggests. One
think
  which
bothers me is following. EINTR can happen in different places
and
 the
situations can be quite rare in some circumstances. It can
lead to
hard to reproduce stability bugs (race conditions).
  
   Can you give an example?
 
  Half a year ago, I was working on the problem. Socket operations
get
  sometimes interrupted. We have found out that it occurs sometime
after
  GC. It was not quite easy as the application was quite big and
  situation - quite rare.
 
  Given the fact, that current implementation of monitor reservation
  code can stop other thread in quite random fashion we should have
rock
  solid support of EINTR handling everywhere the select(), poll()
calls
  is used.
 
  --
  Ivan
  Intel Enterprise Solutions Software Division
 
  
We should find a
way how to test the implementation.
  
   +1!
  
   :)
  
   geir
 
 
-
  Terms of use : http://incubator.apache.org/harmony/mailing.html
  To unsubscribe, e-mail:
[EMAIL PROTECTED]
  For additional commands, e-mail:
[EMAIL PROTECTED]
 
 
 
 




--
Weldon Washburn
Intel Middleware Products Division


Re: [classlib][luni] signalis interruptus in hysock

2006-10-25 Thread Geir Magnusson Jr.



Fedotov, Alexei A wrote:

Guys,

Could you please help me to understand the following?

1. Is HARMONY-1904 actually a duplicate of my HARMONY-1879?


scanning quickly, I don't think so.


2. Ivan, do I remember correctly that you've already fixed that bug once
when debugging Eclipse long run failures? Where is that patch?


this bug arose when the new TM was added, which uses signals much more 
aggressively.


geir



Thank you in advance.

With best regards,
Alexei Fedotov,
Intel Java  XML Engineering


-Original Message-
From: Weldon Washburn [mailto:[EMAIL PROTECTED]
Sent: Wednesday, October 25, 2006 5:36 PM
To: harmony-dev@incubator.apache.org; [EMAIL PROTECTED]
Subject: Re: [classlib][luni] signalis interruptus in hysock

On 10/24/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:



Weldon Washburn wrote:

It seems JIRA is down for maintenance.  If HARMONY-1904 is still

open

perhaps it makes sense to put a counter in the while (...) {

select...}

loop. And after every N loops, print a warning/diagnostic message.

For whom and to what end?  Why not just return EINTR (in hysock

speak)?

The
value for N would have to be tuned.  I don't know what the best

number

would
be. Given that 1904 patch is not the final solution, at least a

diagnostic

that hints at where the system hangs would be useful.  It might

make

sense

to even print a stack trace.   Also, I agree with Ivan below.

Signals

bugs

are very hard to debug.  And diagnostics can help us all understand

the

corner cases better.

But so far, no one has shown that the system hangs, or can hang,

simply

because we return EINTR


Sorry for not being clear.  I was reacting to the patch in 1904 itself.
Not
the bigger issue of fixing the upper layers to comprehend EINTR.  My
understanding is that this patch does not fix the problem.  This patch

does

not return EINTR.  If for whatever reason this patch is committed, I
recommend adding the above diagnostic code so that we don't dig

ourselves

an
even deeper hole.

If it is decided 1904 should not be committed, it might make sense to
close it with  won't fix.

geir

On 10/20/06, Ivan Volosyuk [EMAIL PROTECTED] wrote:

On 10/20/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:


Ivan Volosyuk wrote:

Well, I think that the solution is what Geir suggests. One

think

which

bothers me is following. EINTR can happen in different places

and

the

situations can be quite rare in some circumstances. It can

lead to

hard to reproduce stability bugs (race conditions).

Can you give an example?

Half a year ago, I was working on the problem. Socket operations

get

sometimes interrupted. We have found out that it occurs sometime

after

GC. It was not quite easy as the application was quite big and
situation - quite rare.

Given the fact, that current implementation of monitor reservation
code can stop other thread in quite random fashion we should have

rock

solid support of EINTR handling everywhere the select(), poll()

calls

is used.

--
Ivan
Intel Enterprise Solutions Software Division


We should find a
way how to test the implementation.

+1!

:)

geir



-

Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail:

[EMAIL PROTECTED]

For additional commands, e-mail:

[EMAIL PROTECTED]







--
Weldon Washburn
Intel Middleware Products Division




Re: [classlib][luni] signalis interruptus in hysock

2006-10-23 Thread Weldon Washburn

It seems JIRA is down for maintenance.  If HARMONY-1904 is still open
perhaps it makes sense to put a counter in the while (...) { select...}
loop. And after every N loops, print a warning/diagnostic message.   The
value for N would have to be tuned.  I don't know what the best number would
be. Given that 1904 patch is not the final solution, at least a diagnostic
that hints at where the system hangs would be useful.  It might make sense
to even print a stack trace.   Also, I agree with Ivan below.  Signals bugs
are very hard to debug.  And diagnostics can help us all understand the
corner cases better.

On 10/20/06, Ivan Volosyuk [EMAIL PROTECTED] wrote:


On 10/20/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:


 Ivan Volosyuk wrote:
  Well, I think that the solution is what Geir suggests. One think which
  bothers me is following. EINTR can happen in different places and the
  situations can be quite rare in some circumstances. It can lead to
  hard to reproduce stability bugs (race conditions).

 Can you give an example?

Half a year ago, I was working on the problem. Socket operations get
sometimes interrupted. We have found out that it occurs sometime after
GC. It was not quite easy as the application was quite big and
situation - quite rare.

Given the fact, that current implementation of monitor reservation
code can stop other thread in quite random fashion we should have rock
solid support of EINTR handling everywhere the select(), poll() calls
is used.

--
Ivan
Intel Enterprise Solutions Software Division


  We should find a
  way how to test the implementation.

 +1!

 :)

 geir

-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





--
Weldon Washburn
Intel Middleware Products Division


Re: [classlib][luni] signalis interruptus in hysock

2006-10-20 Thread Ivan Volosyuk

On 10/20/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:



Ivan Volosyuk wrote:
 Well, I think that the solution is what Geir suggests. One think which
 bothers me is following. EINTR can happen in different places and the
 situations can be quite rare in some circumstances. It can lead to
 hard to reproduce stability bugs (race conditions).

Can you give an example?


Half a year ago, I was working on the problem. Socket operations get
sometimes interrupted. We have found out that it occurs sometime after
GC. It was not quite easy as the application was quite big and
situation - quite rare.

Given the fact, that current implementation of monitor reservation
code can stop other thread in quite random fashion we should have rock
solid support of EINTR handling everywhere the select(), poll() calls
is used.

--
Ivan
Intel Enterprise Solutions Software Division



 We should find a
 way how to test the implementation.

+1!

:)

geir


-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-10-19 Thread Jeff Disher

The problem is larger than SA_RESTART since a VM can receive signals for
which it did not set SA_RESTART.  On some platforms, forcing EINTR is the
only way to break a thread out of an indefinitely blocking syscall.  Losing
this information would cause us to lose the ability to perform these kinds
of operations.

If the lower level didn't generate the signal, it probably shouldn't assume
its intention.

The timeout handling is an issue which we can probably resolve by stating
that the timeout value is undefined after a call to hysock_select.


Does that make sense?
Jeff.



On 10/18/06, Ivan Volosyuk [EMAIL PROTECTED] wrote:


Why not? I understand your opinion, that EINTR should be handled in
upper layers. But here we have somewhat buggy (strange) implementation
specifics of select() and similar calls.
Good functions like read() and write() and so on doesn't interrupt
with SA_RESTART system calls, but select() does. I think it is low
level issue and should be handled in the same low level layer.
Handling it in upper layer may cause hard to detect bugs in that
implementations.
There are issues with timeout handling here to maintain platform
independence (Linux implementation is different then POSIX, AFAIK),
but it can be solved with minor performance decrease.
--
Ivan

On 10/18/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:
 Thanks, but we're not going to eat EINTR

 Artem Aliev wrote:
  Geir,
 
  I create HARMONY-1904 issue for this case.
 
  Thanks
  Artem

-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: [classlib][luni] signalis interruptus in hysock

2006-10-19 Thread Ivan Volosyuk

Well, I think that the solution is what Geir suggests. One think which
bothers me is following. EINTR can happen in different places and the
situations can be quite rare in some circumstances. It can lead to
hard to reproduce stability bugs (race conditions). We should find a
way how to test the implementation.
--
Ivan

On 10/19/06, Jeff Disher [EMAIL PROTECTED] wrote:

The problem is larger than SA_RESTART since a VM can receive signals for
which it did not set SA_RESTART.  On some platforms, forcing EINTR is the
only way to break a thread out of an indefinitely blocking syscall.  Losing
this information would cause us to lose the ability to perform these kinds
of operations.

If the lower level didn't generate the signal, it probably shouldn't assume
its intention.

The timeout handling is an issue which we can probably resolve by stating
that the timeout value is undefined after a call to hysock_select.


Does that make sense?
Jeff.



On 10/18/06, Ivan Volosyuk [EMAIL PROTECTED] wrote:

 Why not? I understand your opinion, that EINTR should be handled in
 upper layers. But here we have somewhat buggy (strange) implementation
 specifics of select() and similar calls.
 Good functions like read() and write() and so on doesn't interrupt
 with SA_RESTART system calls, but select() does. I think it is low
 level issue and should be handled in the same low level layer.
 Handling it in upper layer may cause hard to detect bugs in that
 implementations.
 There are issues with timeout handling here to maintain platform
 independence (Linux implementation is different then POSIX, AFAIK),
 but it can be solved with minor performance decrease.
 --
 Ivan

 On 10/18/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:
  Thanks, but we're not going to eat EINTR
 
  Artem Aliev wrote:
   Geir,
  
   I create HARMONY-1904 issue for this case.
  
   Thanks
   Artem


--
Ivan
Intel Enterprise Solutions Software Division

-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-10-19 Thread Geir Magnusson Jr.



Ivan Volosyuk wrote:

Why not? I understand your opinion, that EINTR should be handled in
upper layers. But here we have somewhat buggy (strange) implementation
specifics of select() and similar calls.


There's nothing buggy about it - it's working exactly as it's supposed to.


Good functions like read() and write() and so on doesn't interrupt
with SA_RESTART system calls, but select() does. 


And that's clearly defined in the API - it's not a bug.  It's stupid, 
but not a bug :)



I think it is low
level issue and should be handled in the same low level layer.
Handling it in upper layer may cause hard to detect bugs in that
implementations.


Why?  It's a perfectly valid return value.


There are issues with timeout handling here to maintain platform
independence (Linux implementation is different then POSIX, AFAIK),
but it can be solved with minor performance decrease.
--
Ivan

On 10/18/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:

Thanks, but we're not going to eat EINTR

Artem Aliev wrote:
 Geir,

 I create HARMONY-1904 issue for this case.

 Thanks
 Artem


-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-10-18 Thread Artem Aliev

Geir,

I create HARMONY-1904 issue for this case.

Thanks
Artem

On 10/17/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:



Artem Aliev wrote:
 Gier,

 I'd like to resurrect this topic.

Oh goody!

 We try to run JBoss on Harmony and meet the same problem.

 Here is an except from the stack trace:
 java.net.SocketException: The call was cancelled
at
 
org.apache.harmony.luni.platform.OSNetworkSystem.availableStreamImpl(OSNetworkSystem.java)

at
 
org.apache.harmony.luni.platform.OSNetworkSystem.availableStream(OSNetworkSystem.java:216)

at
 
org.apache.harmony.luni.net.PlainSocketImpl.available(PlainSocketImpl.java:150)

at
 
org.apache.harmony.luni.net.SocketInputStream.available(SocketInputStream.java:50)

at
 
com.mysql.jdbc.util.ReadAheadInputStream.available(ReadAheadInputStream.java:212)

at com.mysql.jdbc.MysqlIO.clearInputStream(MysqlIO.java:774)


 Actually, my old patch (attached) fix this problem too.
 So could you please take a look at the patch one more time
 or implement your fix for the availableStreamImpl() and other
 functions that call
 hysock_select().

Yes - that was something on my list.  I knew that first iteration was
incomplete, but wanted to wait to see what happened.  I still don't
agree that those low level calls should simply swallow the EINTR, but
let the higher levels in our 10,000 layer stack :) decide what to do.


 Thanks
 Artem

 PS:
 And one other comment on the proposed patch...  it doesn't respect the
 timeout as it restarts the select() with the original timeout..
 # man select

  On Linux, the function select modifies timeout to reflect the
 amount of time not slept; most  other  implementations  do  not  do
   this.   This  causes  problems  both  when  Linux code which
 reads timeout is ported to other operating systems, and when code is
   ported to Linux that reuses a struct timeval for multiple
 selects in a loop without reinitializing it.  Consider  timeout  to
 be
   undefined after select returns.

 PPS: FYI: the comments and revision for previous fix.


 svn log modules/luni/src/main/native/luni/shared/socket.c

 r441311 | geirm | 2006-09-08 04:51:36 +0400 (Fri, 08 Sep 2006) | 12 lines
 modifications to hysock_select() to report when
 interrupted, and then in pollSelectRead() in
 socket.c for linux only to handle the
 interrupt return code.

 This passes all tests and also fixes the problem
 with tomcat.  I'd like to continue with the other
 uses of hysock_select() in socket.c and elsewhere
 but want to commit to let others review before
 I go further


 On 9/7/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:
 And one other comment on the proposed patch...  it doesn't respect the
 timeout as it restarts the select() with the original timeout...



 Geir Magnusson Jr. wrote:
 
 
  Weldon Washburn wrote:
  On 9/1/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:
 
 
 
  Artem Aliev wrote:
   The hyport and hy* are a porting layer that provides os independent
   interface.
   hysock_select() does not return EINTR on windows why it should
 do it
   under linux?
   either user presses Ctrl-c or ctrl-\ or VM uses other signals
 for its
   owns needs.
 
  I think you just gave me the answer.
 
  The *caller* to hysock_select() needs to decide what to do on
 EINTR, not
  hysock_select() itself.
 
  I still don't think this is a perfect solution, but I think it's
  better :)
 
 
  Does the above solve the problem completely or is it a temporary
 patch?
 
  I don't know, but happy to call it a temporary patch - right now we're
  stuck, because we can't even run tomcat and I want to do a new
 snapshot.
 
  Will the caller to hysock_select() need to have #ifdef Windows
  #ifdef
  Linux...?
 
  We already have platform specific code that calls hysock_select()
 
  geir
 
 
  -
  Terms of use : http://incubator.apache.org/harmony/mailing.html
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]
 

 -
 Terms of use : http://incubator.apache.org/harmony/mailing.html
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



 

 --- modules/luni/src/main/native/port/linux/hysock.c
 +++ modules/luni/src/main/native/port/linux/hysock.c
 @@ -2570,11 +2570,16 @@ hysock_select (struct HyPortLibrary * po
I_32 rc = 0;
I_32 result = 0;

 -  result =
 +  do
 +  {
 +result =
  select (nfds, readfds == NULL ? NULL : readfds-handle,
  writefds == NULL ? NULL : writefds-handle,
  exceptfds == NULL ? NULL : exceptfds-handle,
  timeout == NULL ? NULL : timeout-time);
 +  }
 +  while (result == -1  errno == EINTR);
 +
if (result == -1)
  {
rc = errno;


 

Re: [classlib][luni] signalis interruptus in hysock

2006-10-18 Thread Geir Magnusson Jr.

Thanks, but we're not going to eat EINTR

Artem Aliev wrote:

Geir,

I create HARMONY-1904 issue for this case.

Thanks
Artem

On 10/17/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:



Artem Aliev wrote:
 Gier,

 I'd like to resurrect this topic.

Oh goody!

 We try to run JBoss on Harmony and meet the same problem.

 Here is an except from the stack trace:
 java.net.SocketException: The call was cancelled
at
 
org.apache.harmony.luni.platform.OSNetworkSystem.availableStreamImpl(OSNetworkSystem.java) 



at
 
org.apache.harmony.luni.platform.OSNetworkSystem.availableStream(OSNetworkSystem.java:216) 



at
 
org.apache.harmony.luni.net.PlainSocketImpl.available(PlainSocketImpl.java:150) 



at
 
org.apache.harmony.luni.net.SocketInputStream.available(SocketInputStream.java:50) 



at
 
com.mysql.jdbc.util.ReadAheadInputStream.available(ReadAheadInputStream.java:212) 



at com.mysql.jdbc.MysqlIO.clearInputStream(MysqlIO.java:774)


 Actually, my old patch (attached) fix this problem too.
 So could you please take a look at the patch one more time
 or implement your fix for the availableStreamImpl() and other
 functions that call
 hysock_select().

Yes - that was something on my list.  I knew that first iteration was
incomplete, but wanted to wait to see what happened.  I still don't
agree that those low level calls should simply swallow the EINTR, but
let the higher levels in our 10,000 layer stack :) decide what to do.


 Thanks
 Artem

 PS:
 And one other comment on the proposed patch...  it doesn't respect the
 timeout as it restarts the select() with the original timeout..
 # man select

  On Linux, the function select modifies timeout to reflect the
 amount of time not slept; most  other  implementations  do  not  do
   this.   This  causes  problems  both  when  Linux code which
 reads timeout is ported to other operating systems, and when code is
   ported to Linux that reuses a struct timeval for multiple
 selects in a loop without reinitializing it.  Consider  timeout  to
 be
   undefined after select returns.

 PPS: FYI: the comments and revision for previous fix.


 svn log modules/luni/src/main/native/luni/shared/socket.c

 r441311 | geirm | 2006-09-08 04:51:36 +0400 (Fri, 08 Sep 2006) | 12 
lines

 modifications to hysock_select() to report when
 interrupted, and then in pollSelectRead() in
 socket.c for linux only to handle the
 interrupt return code.

 This passes all tests and also fixes the problem
 with tomcat.  I'd like to continue with the other
 uses of hysock_select() in socket.c and elsewhere
 but want to commit to let others review before
 I go further


 On 9/7/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:
 And one other comment on the proposed patch...  it doesn't respect the
 timeout as it restarts the select() with the original timeout...



 Geir Magnusson Jr. wrote:
 
 
  Weldon Washburn wrote:
  On 9/1/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:
 
 
 
  Artem Aliev wrote:
   The hyport and hy* are a porting layer that provides os 
independent

   interface.
   hysock_select() does not return EINTR on windows why it should
 do it
   under linux?
   either user presses Ctrl-c or ctrl-\ or VM uses other signals
 for its
   owns needs.
 
  I think you just gave me the answer.
 
  The *caller* to hysock_select() needs to decide what to do on
 EINTR, not
  hysock_select() itself.
 
  I still don't think this is a perfect solution, but I think it's
  better :)
 
 
  Does the above solve the problem completely or is it a temporary
 patch?
 
  I don't know, but happy to call it a temporary patch - right now 
we're

  stuck, because we can't even run tomcat and I want to do a new
 snapshot.
 
  Will the caller to hysock_select() need to have #ifdef Windows
  #ifdef
  Linux...?
 
  We already have platform specific code that calls hysock_select()
 
  geir
 
 
  
-

  Terms of use : http://incubator.apache.org/harmony/mailing.html
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: 
[EMAIL PROTECTED]

 

 -
 Terms of use : http://incubator.apache.org/harmony/mailing.html
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]



 



 --- modules/luni/src/main/native/port/linux/hysock.c
 +++ modules/luni/src/main/native/port/linux/hysock.c
 @@ -2570,11 +2570,16 @@ hysock_select (struct HyPortLibrary * po
I_32 rc = 0;
I_32 result = 0;

 -  result =
 +  do
 +  {
 +result =
  select (nfds, readfds == NULL ? NULL : readfds-handle,
  writefds == NULL ? NULL : writefds-handle,
  exceptfds == NULL ? NULL : exceptfds-handle,
  timeout == NULL ? NULL : timeout-time);
 +  }
 +  while (result == -1  

Re: [classlib][luni] signalis interruptus in hysock

2006-10-18 Thread Ivan Volosyuk

Why not? I understand your opinion, that EINTR should be handled in
upper layers. But here we have somewhat buggy (strange) implementation
specifics of select() and similar calls.
Good functions like read() and write() and so on doesn't interrupt
with SA_RESTART system calls, but select() does. I think it is low
level issue and should be handled in the same low level layer.
Handling it in upper layer may cause hard to detect bugs in that
implementations.
There are issues with timeout handling here to maintain platform
independence (Linux implementation is different then POSIX, AFAIK),
but it can be solved with minor performance decrease.
--
Ivan

On 10/18/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:

Thanks, but we're not going to eat EINTR

Artem Aliev wrote:
 Geir,

 I create HARMONY-1904 issue for this case.

 Thanks
 Artem


-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-10-17 Thread Artem Aliev

Gier,

I'd like to resurrect this topic.
We try to run JBoss on Harmony and meet the same problem.

Here is an except from the stack trace:
java.net.SocketException: The call was cancelled
   at 
org.apache.harmony.luni.platform.OSNetworkSystem.availableStreamImpl(OSNetworkSystem.java)
   at 
org.apache.harmony.luni.platform.OSNetworkSystem.availableStream(OSNetworkSystem.java:216)
   at 
org.apache.harmony.luni.net.PlainSocketImpl.available(PlainSocketImpl.java:150)
   at 
org.apache.harmony.luni.net.SocketInputStream.available(SocketInputStream.java:50)
   at 
com.mysql.jdbc.util.ReadAheadInputStream.available(ReadAheadInputStream.java:212)
   at com.mysql.jdbc.MysqlIO.clearInputStream(MysqlIO.java:774)


Actually, my old patch (attached) fix this problem too.
So could you please take a look at the patch one more time
or implement your fix for the availableStreamImpl() and other
functions that call
hysock_select().

Thanks
Artem

PS:

And one other comment on the proposed patch...  it doesn't respect the
timeout as it restarts the select() with the original timeout..

# man select

 On Linux, the function select modifies timeout to reflect the
amount of time not slept; most  other  implementations  do  not  do
  this.   This  causes  problems  both  when  Linux code which
reads timeout is ported to other operating systems, and when code is
  ported to Linux that reuses a struct timeval for multiple
selects in a loop without reinitializing it.  Consider  timeout  to
be
  undefined after select returns.

PPS: FYI: the comments and revision for previous fix.


svn log modules/luni/src/main/native/luni/shared/socket.c

r441311 | geirm | 2006-09-08 04:51:36 +0400 (Fri, 08 Sep 2006) | 12 lines
modifications to hysock_select() to report when
interrupted, and then in pollSelectRead() in
socket.c for linux only to handle the
interrupt return code.

This passes all tests and also fixes the problem
with tomcat.  I'd like to continue with the other
uses of hysock_select() in socket.c and elsewhere
but want to commit to let others review before
I go further


On 9/7/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:

And one other comment on the proposed patch...  it doesn't respect the
timeout as it restarts the select() with the original timeout...



Geir Magnusson Jr. wrote:


 Weldon Washburn wrote:
 On 9/1/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:



 Artem Aliev wrote:
  The hyport and hy* are a porting layer that provides os independent
  interface.
  hysock_select() does not return EINTR on windows why it should do it
  under linux?
  either user presses Ctrl-c or ctrl-\ or VM uses other signals for its
  owns needs.

 I think you just gave me the answer.

 The *caller* to hysock_select() needs to decide what to do on EINTR, not
 hysock_select() itself.

 I still don't think this is a perfect solution, but I think it's
 better :)


 Does the above solve the problem completely or is it a temporary patch?

 I don't know, but happy to call it a temporary patch - right now we're
 stuck, because we can't even run tomcat and I want to do a new snapshot.

 Will the caller to hysock_select() need to have #ifdef Windows
 #ifdef
 Linux...?

 We already have platform specific code that calls hysock_select()

 geir


 -
 Terms of use : http://incubator.apache.org/harmony/mailing.html
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]


-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


--- modules/luni/src/main/native/port/linux/hysock.c
+++ modules/luni/src/main/native/port/linux/hysock.c
@@ -2570,11 +2570,16 @@ hysock_select (struct HyPortLibrary * po
   I_32 rc = 0;
   I_32 result = 0;
 
-  result =
+  do 
+  {
+result =
 select (nfds, readfds == NULL ? NULL : readfds-handle,
 writefds == NULL ? NULL : writefds-handle,
 exceptfds == NULL ? NULL : exceptfds-handle,
 timeout == NULL ? NULL : timeout-time);
+  } 
+  while (result == -1  errno == EINTR);
+
   if (result == -1)
 {
   rc = errno;
-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Re: [classlib][luni] signalis interruptus in hysock

2006-10-17 Thread Geir Magnusson Jr.



Artem Aliev wrote:

Gier,

I'd like to resurrect this topic.


Oh goody!


We try to run JBoss on Harmony and meet the same problem.

Here is an except from the stack trace:
java.net.SocketException: The call was cancelled
   at 
org.apache.harmony.luni.platform.OSNetworkSystem.availableStreamImpl(OSNetworkSystem.java) 

   at 
org.apache.harmony.luni.platform.OSNetworkSystem.availableStream(OSNetworkSystem.java:216) 

   at 
org.apache.harmony.luni.net.PlainSocketImpl.available(PlainSocketImpl.java:150) 

   at 
org.apache.harmony.luni.net.SocketInputStream.available(SocketInputStream.java:50) 

   at 
com.mysql.jdbc.util.ReadAheadInputStream.available(ReadAheadInputStream.java:212) 


   at com.mysql.jdbc.MysqlIO.clearInputStream(MysqlIO.java:774)


Actually, my old patch (attached) fix this problem too.
So could you please take a look at the patch one more time
or implement your fix for the availableStreamImpl() and other
functions that call
hysock_select().


Yes - that was something on my list.  I knew that first iteration was 
incomplete, but wanted to wait to see what happened.  I still don't 
agree that those low level calls should simply swallow the EINTR, but 
let the higher levels in our 10,000 layer stack :) decide what to do.




Thanks
Artem

PS:

And one other comment on the proposed patch...  it doesn't respect the
timeout as it restarts the select() with the original timeout..

# man select

 On Linux, the function select modifies timeout to reflect the
amount of time not slept; most  other  implementations  do  not  do
  this.   This  causes  problems  both  when  Linux code which
reads timeout is ported to other operating systems, and when code is
  ported to Linux that reuses a struct timeval for multiple
selects in a loop without reinitializing it.  Consider  timeout  to
be
  undefined after select returns.

PPS: FYI: the comments and revision for previous fix.


svn log modules/luni/src/main/native/luni/shared/socket.c

r441311 | geirm | 2006-09-08 04:51:36 +0400 (Fri, 08 Sep 2006) | 12 lines
modifications to hysock_select() to report when
interrupted, and then in pollSelectRead() in
socket.c for linux only to handle the
interrupt return code.

This passes all tests and also fixes the problem
with tomcat.  I'd like to continue with the other
uses of hysock_select() in socket.c and elsewhere
but want to commit to let others review before
I go further


On 9/7/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:

And one other comment on the proposed patch...  it doesn't respect the
timeout as it restarts the select() with the original timeout...



Geir Magnusson Jr. wrote:


 Weldon Washburn wrote:
 On 9/1/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:



 Artem Aliev wrote:
  The hyport and hy* are a porting layer that provides os independent
  interface.
  hysock_select() does not return EINTR on windows why it should 
do it

  under linux?
  either user presses Ctrl-c or ctrl-\ or VM uses other signals 
for its

  owns needs.

 I think you just gave me the answer.

 The *caller* to hysock_select() needs to decide what to do on 
EINTR, not

 hysock_select() itself.

 I still don't think this is a perfect solution, but I think it's
 better :)


 Does the above solve the problem completely or is it a temporary 
patch?


 I don't know, but happy to call it a temporary patch - right now we're
 stuck, because we can't even run tomcat and I want to do a new 
snapshot.


 Will the caller to hysock_select() need to have #ifdef Windows
 #ifdef
 Linux...?

 We already have platform specific code that calls hysock_select()

 geir


 -
 Terms of use : http://incubator.apache.org/harmony/mailing.html
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]


-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]






--- modules/luni/src/main/native/port/linux/hysock.c
+++ modules/luni/src/main/native/port/linux/hysock.c
@@ -2570,11 +2570,16 @@ hysock_select (struct HyPortLibrary * po
   I_32 rc = 0;
   I_32 result = 0;
 
-  result =
+  do 
+  {

+result =
 select (nfds, readfds == NULL ? NULL : readfds-handle,
 writefds == NULL ? NULL : writefds-handle,
 exceptfds == NULL ? NULL : exceptfds-handle,
 timeout == NULL ? NULL : timeout-time);
+  } 
+  while (result == -1  errno == EINTR);

+
   if (result == -1)
 {
   rc = errno;




-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: 

Re: [classlib][luni] signalis interruptus in hysock

2006-09-07 Thread Weldon Washburn

On 9/1/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:




Artem Aliev wrote:
 The hyport and hy* are a porting layer that provides os independent
 interface.
 hysock_select() does not return EINTR on windows why it should do it
 under linux?
 either user presses Ctrl-c or ctrl-\ or VM uses other signals for its
 owns needs.

I think you just gave me the answer.

The *caller* to hysock_select() needs to decide what to do on EINTR, not
hysock_select() itself.

I still don't think this is a perfect solution, but I think it's better :)



Does the above solve the problem completely or is it a temporary patch?
Will the caller to hysock_select() need to have #ifdef Windows #ifdef
Linux...?

I still want to know about J9 though.  Maybe I need to go work for IBM

again :)

geir


-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





--
Weldon Washburn
Intel Middleware Products Division


Re: [classlib][luni] signalis interruptus in hysock

2006-09-07 Thread Geir Magnusson Jr.



Weldon Washburn wrote:

On 9/1/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:




Artem Aliev wrote:
 The hyport and hy* are a porting layer that provides os independent
 interface.
 hysock_select() does not return EINTR on windows why it should do it
 under linux?
 either user presses Ctrl-c or ctrl-\ or VM uses other signals for its
 owns needs.

I think you just gave me the answer.

The *caller* to hysock_select() needs to decide what to do on EINTR, not
hysock_select() itself.

I still don't think this is a perfect solution, but I think it's 
better :)



Does the above solve the problem completely or is it a temporary patch?


I don't know, but happy to call it a temporary patch - right now we're 
stuck, because we can't even run tomcat and I want to do a new snapshot.



Will the caller to hysock_select() need to have #ifdef Windows #ifdef
Linux...?


We already have platform specific code that calls hysock_select()

geir


-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-09-07 Thread Geir Magnusson Jr.
And one other comment on the proposed patch...  it doesn't respect the 
timeout as it restarts the select() with the original timeout...




Geir Magnusson Jr. wrote:



Weldon Washburn wrote:

On 9/1/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:




Artem Aliev wrote:
 The hyport and hy* are a porting layer that provides os independent
 interface.
 hysock_select() does not return EINTR on windows why it should do it
 under linux?
 either user presses Ctrl-c or ctrl-\ or VM uses other signals for its
 owns needs.

I think you just gave me the answer.

The *caller* to hysock_select() needs to decide what to do on EINTR, not
hysock_select() itself.

I still don't think this is a perfect solution, but I think it's 
better :)



Does the above solve the problem completely or is it a temporary patch?


I don't know, but happy to call it a temporary patch - right now we're 
stuck, because we can't even run tomcat and I want to do a new snapshot.


Will the caller to hysock_select() need to have #ifdef Windows 
#ifdef

Linux...?


We already have platform specific code that calls hysock_select()

geir


-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-09-04 Thread Jimmy, Jing Lv

Geir Magnusson Jr. wrote:



Artem Aliev wrote:
The hyport and hy* are a porting layer that provides os independent 
interface.

hysock_select() does not return EINTR on windows why it should do it
under linux?
either user presses Ctrl-c or ctrl-\ or VM uses other signals for its
owns needs.


I think you just gave me the answer.

The *caller* to hysock_select() needs to decide what to do on EINTR, not 
 hysock_select() itself.




+1 to this solution, let's first keep portlib as it is, IIRC, there's 
many native methods refers it.


But I'm still worry about ignore the signal in select(or its callers). I 
know few about the SIGUSR2, but I doubt if some user give a signal to 
the thread, how can our select process tell if the signal comes from 
user or form VM? Shall it continue anyway?
Mask the signal may be a better way, select only stop when a certain 
signal comes with a certain mask. However it may still puzzle the native 
code if user also use masks.


I was thinking the powerful SIGUSR2 may resolve some problem 
straightforwardly(like wakeup, etc.), but now I see there are still many 
problems.
I believe J9 was not using any lib like SIGUSR2, maybe they create and 
handle threads themselves (RI may do like this as well).


I'll keep an eye on the discussion, there are may select-related native 
codes to deal ...



I still don't think this is a perfect solution, but I think it's better :)

I still want to know about J9 though.  Maybe I need to go work for IBM 
again :)


geir


-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





--

Best Regards!

Jimmy, Jing Lv
China Software Development Lab, IBM

-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-09-01 Thread Paulex Yang
This is a VMI extension introduced by HARMONY-635, and this modification 
was discussed before in a very long thread[1]


But it's weird that, at revision r431077, it is removed, anyone knows 
why:-(.


[1] 
http://mail-archives.apache.org/mod_mbox/incubator-harmony-dev/200606.mbox/[EMAIL PROTECTED]


Alexey Varlamov wrote:

Guys,

Probably I missed that thread on InterruptibleChannel implementation,
but I've just hit on the following code in
java.nio.channels.spi.AbstractInterruptibleChannel:

static {
try {
setInterruptAction = AccessController
.doPrivileged(new PrivilegedExceptionActionMethod() {
public Method run() throws Exception {return
Thread.class.getDeclaredMethod(setInterruptAction,new 
Class[] {

Runnable.class });
}
});
setInterruptAction.setAccessible(true);
} catch (Exception e) {
// FIXME: be accomodate before VM actually provides
// setInterruptAction method
// throw new Error(e);
}
}

There are no docs on j.l.Thread.setInterruptAction()... Does this code
snippet relate to the subject of this discussion?

--
Alexey

2006/8/31, Paulex Yang [EMAIL PROTECTED]:

Geir Magnusson Jr. wrote:
 Time to take another run at this since I didn't get any responses on
 the drlvm thread.

 We have the problem that DRLVM uses SIGUSR2 in the thread manager (not
 an unreasonable thing to do, I believe) but this results in knocking
 threads out of select() in hysock.c (and I'm sure we'll see it in
 other places.)

 Now, I'm not sure what the right course of action is.  We have a
 suggested patch from Artem that suggests we just ignore when the tread
 is interrupted :

 --- modules/luni/src/main/native/port/linux/hysock.c
 +++ modules/luni/src/main/native/port/linux/hysock.c
 @@ -2570,11 +2570,16 @@ hysock_select (struct HyPortLibrary * po
   I_32 rc = 0;
   I_32 result = 0;

 -  result =
 +  do
 +  {
 +result =
 select (nfds, readfds == NULL ? NULL : readfds-handle,
 writefds == NULL ? NULL : writefds-handle,
 exceptfds == NULL ? NULL : exceptfds-handle,
 timeout == NULL ? NULL : timeout-time);
 +  }
 +  while (result == -1  errno == EINTR);
 +
   if (result == -1)
 {
   rc = errno;
IIRC, months ago similar approach was discussed in another thread for
j.nio.channels.InterruptibleChannel implementation, but IMHO it can be a
workaround but is not acceptable as a solution, because
InterruptibleChannel is extensible by user application, i.e., user can
implement their own interruptible blocking I/O easily without
considering too much on thread sync issues, it's not reasonable to ask
user writing codes within a loop like this.


 this works, but I'm bothered by the fact that we're just blindly
 ignoring signals like this.  I also think that I need to go and do
 this everywhere we have a non-restarted interruptable blocking system
 call.

 Now, I'd like to get this fixed today, as it's high time for another
 snapshot of the JRE and HDK, but w/o it, Tomcat runs for 2 seconds at
 best :)

 So - does anyone have any other bright ideas?  Why don't we see this
 with J9?Would it be better to do a per-thread signal mask after
 asking the thread manager what signal it's using du jour?  (Andrey
 noted that Sun allows one to change the signals used, apparently to
 prevent collision w/ user code vi JNI, I guess...)

 geir




 -
 Terms of use : http://incubator.apache.org/harmony/mailing.html
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




--
Paulex Yang
China Software Development Lab
IBM



-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





--
Paulex Yang
China Software Development Lab
IBM



-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-09-01 Thread Artem Aliev

Hello, guys.

Do not forgot about portability
Hysock lib is a porting layer and it should work the same way on all platforms.
The windows does not support signals at all
So the porting layer should hide all OS depended signal processing
including this select() problem.
+1 to my patch.
The patch removes implementation depended feature.

The other question is how to interrupt read/select operations in
hyport libraries.
The close() operation as I remember interrupt read() operation but not
interrupt select(). Select for example could be interrupted with
special file that could be added to the file list.
One more time: signals is not correct way because there is no signals
under Win32 and there is no signals API in porting layer.

Thanks
Artem

-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-09-01 Thread Alexey Varlamov

2006/8/31, Geir Magnusson Jr. [EMAIL PROTECTED]:



Anton Luht wrote:
 Hello,

 Behaviour of select() with SA_RESTART can vary by platform - see [1]

 ---quote begins
 [EINTR]
 The select() function was interrupted before any of the selected events
 occurred and before the timeout interval expired. If SA_RESTART has been
 set
 for the interrupting signal, it is implementation-dependent whether
 select()
 restarts or returns with [EINTR].
 ---quote ends

 Thus, I think Artem's patch is correct - it just make behaviour of
 select() not dependent on the underlying platform - the call is
 restarted just like read() and write() do.

Hmmm.

Artem's patch does it for all signals.  You can set the sighandler to
SA_RESTART on a *per signal* basis.  So there's a difference.  I'm not
sure if it's a meaningful difference, but it's there.


I'm not an expert in pthreads, but why not use pthread_sigmask[1]
then? Just block SIGUSR2 before select() and unblock/reset upon
return. Better yet, first ask a VM if it uses any signals internally
like DRLVM does, and then block those if any. This requires minor VMI
extension, though.

[1] int pthread_sigmask(int how, const sigset_t *set, sigset_t *oset);
(see http://www.opengroup.org/onlinepubs/007908799/xsh/sigprocmask.html)

--
Alexey


geir



 [1] http://www.opengroup.org/onlinepubs/007908799/xsh/select.html

 On 8/31/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:

 On Aug 31, 2006, at 3:03 AM, Jimmy, Jing Lv wrote:

  Alexey Varlamov wrote:
  Guys,
  Probably I missed that thread on InterruptibleChannel implementation,
  but I've just hit on the following code in
  java.nio.channels.spi.AbstractInterruptibleChannel:
  static {
  try {
  setInterruptAction = AccessController
  .doPrivileged(new PrivilegedExceptionActionMethod() {
  public Method run() throws Exception {return
  Thread.class.getDeclaredMethod(setInterruptAction,
  new Class[] {
  Runnable.class });
  }
  });
  setInterruptAction.setAccessible(true);
  } catch (Exception e) {
  // FIXME: be accomodate before VM actually provides
  // setInterruptAction method
  // throw new Error(e);
  }
  }
  There are no docs on j.l.Thread.setInterruptAction()... Does this
  code
  snippet relate to the subject of this discussion?
 
  Hi,
 
  The SIGUSR2 is much more powerful than I think. If it can
  really break select operation without other harmful side-effect, I
  believe it is a good way to Interrupt Channel.
  IIRC, setInterruptAction is used if VM can not interrupt some I/
  O blocking operation, like select(), so it set a callback and ask
  classlib method to stop them(close fd, etc). But if SIGUSR2 works
  so well, I doubt it is not necessary then.
  BTW, can it break socket read/write or other blocking operation
  as well? (I'm very interested in how does it work, as common thread
  mechanism know nothing how to stop a certain I/O :) )

 Yes, it's one of the 'features' of signals in unix.   So read() and
 write() are also affected - they can return from a blocking operation
 with nothing read and errno set to EINTR.

 SIGUSR2 is not in itself any more powerful than SIGUSR1 - they all
 have the same effect, namely a software interrupt.

 I looked in DRLVM and it appears that the right thing is being done -
 namely the sighandler is being setup w/ the SA_RESTART flag, so that
 system calls that can be restarted are restarted.  Experimentation on
 ubuntu shows that read() can be dealt with this way, but select()
 doesn't appear to be able to...  IOW, I can get it so signals are
 caught and handled and read() is automatically restarted - it doesn't
 complete on the signal and therefore never appears to me to be
 interrupted,  where I cant' get select() to behave that way it
 always completes when a signal is caught.

 This is consistent with Stevens, although he notes that in SVR4,
 select() is restarted. :/  Of course Stevens is pre-linux, and still
 talks about modems.  It's truly a great reference for this, but would
 be nice if it was up-to-date wrt linux.  The problem is that the
 author died a few years ago...

 So I don't know what to do.  I'm hoping someone can tell us how J9
 does this - the obvious answer is that J9 doesn't use any signals,
 but I'm not sure if I buy that yet.

 If we employ the patch, then our socket listening code can't be
 interrupted, and I'm pretty uncomfortable with that.

 geir





 -
 Terms of use : http://incubator.apache.org/harmony/mailing.html
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]





-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





Re: [classlib][luni] signalis interruptus in hysock

2006-09-01 Thread Geir Magnusson Jr.



Artem Aliev wrote:

Hello, guys.

Do not forgot about portability
Hysock lib is a porting layer and it should work the same way on all 
platforms.

The windows does not support signals at all
So the porting layer should hide all OS depended signal processing
including this select() problem.
+1 to my patch.
The patch removes implementation depended feature.


That's crazy.  This isn't an implementation dependent feature - it's a 
side effect.




The other question is how to interrupt read/select operations in
hyport libraries.
The close() operation as I remember interrupt read() operation but not
interrupt select(). Select for example could be interrupted with
special file that could be added to the file list.


This is just getting worse and worse.


One more time: signals is not correct way because there is no signals
under Win32 and there is no signals API in porting layer.


Right, but this isn't a feature we've put into the linux version, it's a 
side effect.





Thanks
Artem

-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-09-01 Thread Geir Magnusson Jr.



Geir Magnusson Jr. wrote:



Artem Aliev wrote:

Hello, guys.

Do not forgot about portability
Hysock lib is a porting layer and it should work the same way on all 
platforms.

The windows does not support signals at all
So the porting layer should hide all OS depended signal processing
including this select() problem.
+1 to my patch.
The patch removes implementation depended feature.


That's crazy.  This isn't an implementation dependent feature - it's a 
side effect.




Sorry - this came across wrong.  I was just kidding, (and in the lines 
below), but for a non-native english speaker, you might mis-interpret.


The key is that signals are an important part of Unix IPC - for example, 
 what happens w/ a ctrl-c?  Will these processes (yes, under linux, a 
thread is a process) quit?


I worry about this and other side effects by masking *all* signals like 
we'd be effectively be doing...




The other question is how to interrupt read/select operations in
hyport libraries.
The close() operation as I remember interrupt read() operation but not
interrupt select(). Select for example could be interrupted with
special file that could be added to the file list.


This is just getting worse and worse.


One more time: signals is not correct way because there is no signals
under Win32 and there is no signals API in porting layer.


Right, but this isn't a feature we've put into the linux version, it's a 
side effect.





Thanks
Artem

-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-09-01 Thread Artem Aliev

Gier,



That's crazy.  This isn't an implementation dependent feature - it's a
side effect.


The standard says: It is implementation-dependent behaviour, not a
side effect :)

http://www.opengroup.org/onlinepubs/007908799/xsh/select.html
---quote begins
[EINTR]
The select() function was interrupted before any of the selected events
occurred and before the timeout interval expired. If SA_RESTART has been set
for the interrupting signal, it is implementation-dependent whether select()
restarts or returns with [EINTR].
---quote ends



The key is that signals are an important part of Unix IPC - for example,
 what happens w/ a ctrl-c?  Will these processes (yes, under linux, a
thread is a process) quit?


The hyport and hy* are a porting layer that provides os independent interface.
hysock_select() does not return EINTR on windows why it should do it
under linux?
either user presses Ctrl-c or ctrl-\ or VM uses other signals for its
owns needs.

By the way
It looks like hyport library try to provide portable interface for
signal handling.
So we handle the signals in OS independent way.

It setups handler for the all commonly used signals with SA_RESTART flag.
See
classlib/modules/luni/src/main/native/port/linux/hysignal.c
The drlvm override some of the handlers but also use the SA_RESTART.
Thus signals should not interrupt system calls in hyport base implementations.
So the patch should not provide other side effects.


Thanks
Artem



On 9/1/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:



Geir Magnusson Jr. wrote:


 Artem Aliev wrote:
 Hello, guys.

 Do not forgot about portability
 Hysock lib is a porting layer and it should work the same way on all
 platforms.
 The windows does not support signals at all
 So the porting layer should hide all OS depended signal processing
 including this select() problem.
 +1 to my patch.
 The patch removes implementation depended feature.

 That's crazy.  This isn't an implementation dependent feature - it's a
 side effect.


Sorry - this came across wrong.  I was just kidding, (and in the lines
below), but for a non-native english speaker, you might mis-interpret.

The key is that signals are an important part of Unix IPC - for example,
 what happens w/ a ctrl-c?  Will these processes (yes, under linux, a
thread is a process) quit?

I worry about this and other side effects by masking *all* signals like
we'd be effectively be doing...


 The other question is how to interrupt read/select operations in
 hyport libraries.
 The close() operation as I remember interrupt read() operation but not
 interrupt select(). Select for example could be interrupted with
 special file that could be added to the file list.

 This is just getting worse and worse.

 One more time: signals is not correct way because there is no signals
 under Win32 and there is no signals API in porting layer.

 Right, but this isn't a feature we've put into the linux version, it's a
 side effect.



 Thanks
 Artem

 -
 Terms of use : http://incubator.apache.org/harmony/mailing.html
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]


 -
 Terms of use : http://incubator.apache.org/harmony/mailing.html
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]


-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-09-01 Thread Geir Magnusson Jr.



Artem Aliev wrote:

Gier,



That's crazy.  This isn't an implementation dependent feature - it's a
side effect.


The standard says: It is implementation-dependent behaviour, not a
side effect :)

http://www.opengroup.org/onlinepubs/007908799/xsh/select.html
---quote begins
[EINTR]
The select() function was interrupted before any of the selected events
occurred and before the timeout interval expired. If SA_RESTART has been 
set
for the interrupting signal, it is implementation-dependent whether 
select()

restarts or returns with [EINTR].
---quote ends


You are misunderstanding what I said.

How select() behaves with respect to restart is implementation-dependent.

The fact that our classlibrary now falls out of select() is a 
side-effect of the fact that other code in the combined program of DRLVM 
+ classlib uses signals.


It's the uses signals part that's key.

That's what I mean by side effect, because until now, there has been no 
discussion and/or coordination with respect to the assumptions of signal 
usage under unix in the project.







The key is that signals are an important part of Unix IPC - for example,
 what happens w/ a ctrl-c?  Will these processes (yes, under linux, a
thread is a process) quit?


The hyport and hy* are a porting layer that provides os independent 
interface.

hysock_select() does not return EINTR on windows why it should do it
under linux?


The windows version returns WSAEINVAL and unix doesn't.

You are mixing up two issues, #1 being Do we want platform-independent 
return codes (which has nothing to do with this) and #2 being how to 
ensure robust and correct behavior of our networking stack.




either user presses Ctrl-c or ctrl-\ or VM uses other signals for its
owns needs.


I'm saying that I don't understand the implications of ignoring all 
signals without any coordination, design or planning.   it would be like 
ignoring all Events in win32.




By the way
It looks like hyport library try to provide portable interface for
signal handling.
So we handle the signals in OS independent way.

It setups handler for the all commonly used signals with SA_RESTART flag.
See
classlib/modules/luni/src/main/native/port/linux/hysignal.c
The drlvm override some of the handlers but also use the SA_RESTART.
Thus signals should not interrupt system calls in hyport base 
implementations.

So the patch should not provide other side effects.



I understand this.  This isn't the issue.

The issue is :

1) will it matter if our select() calls ignore all signals?

2) Is there anything we can learn from J9 from this

So far, you haven't said why it won't matter.  (And I don't expect you 
to answer #2...)


geir



-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-09-01 Thread Geir Magnusson Jr.



Artem Aliev wrote:
The hyport and hy* are a porting layer that provides os independent 
interface.

hysock_select() does not return EINTR on windows why it should do it
under linux?
either user presses Ctrl-c or ctrl-\ or VM uses other signals for its
owns needs.


I think you just gave me the answer.

The *caller* to hysock_select() needs to decide what to do on EINTR, not 
 hysock_select() itself.


I still don't think this is a perfect solution, but I think it's better :)

I still want to know about J9 though.  Maybe I need to go work for IBM 
again :)


geir


-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-08-31 Thread Alexey Varlamov

Guys,

Probably I missed that thread on InterruptibleChannel implementation,
but I've just hit on the following code in
java.nio.channels.spi.AbstractInterruptibleChannel:

static {
try {
setInterruptAction = AccessController
.doPrivileged(new PrivilegedExceptionActionMethod() {
public Method run() throws Exception {  
return
Thread.class.getDeclaredMethod(setInterruptAction,  new 
Class[] {
Runnable.class });
}
});
setInterruptAction.setAccessible(true);
} catch (Exception e) {
// FIXME: be accomodate before VM actually provides
// setInterruptAction method
// throw new Error(e);
}
}

There are no docs on j.l.Thread.setInterruptAction()... Does this code
snippet relate to the subject of this discussion?

--
Alexey

2006/8/31, Paulex Yang [EMAIL PROTECTED]:

Geir Magnusson Jr. wrote:
 Time to take another run at this since I didn't get any responses on
 the drlvm thread.

 We have the problem that DRLVM uses SIGUSR2 in the thread manager (not
 an unreasonable thing to do, I believe) but this results in knocking
 threads out of select() in hysock.c (and I'm sure we'll see it in
 other places.)

 Now, I'm not sure what the right course of action is.  We have a
 suggested patch from Artem that suggests we just ignore when the tread
 is interrupted :

 --- modules/luni/src/main/native/port/linux/hysock.c
 +++ modules/luni/src/main/native/port/linux/hysock.c
 @@ -2570,11 +2570,16 @@ hysock_select (struct HyPortLibrary * po
   I_32 rc = 0;
   I_32 result = 0;

 -  result =
 +  do
 +  {
 +result =
 select (nfds, readfds == NULL ? NULL : readfds-handle,
 writefds == NULL ? NULL : writefds-handle,
 exceptfds == NULL ? NULL : exceptfds-handle,
 timeout == NULL ? NULL : timeout-time);
 +  }
 +  while (result == -1  errno == EINTR);
 +
   if (result == -1)
 {
   rc = errno;
IIRC, months ago similar approach was discussed in another thread for
j.nio.channels.InterruptibleChannel implementation, but IMHO it can be a
workaround but is not acceptable as a solution, because
InterruptibleChannel is extensible by user application, i.e., user can
implement their own interruptible blocking I/O easily without
considering too much on thread sync issues, it's not reasonable to ask
user writing codes within a loop like this.


 this works, but I'm bothered by the fact that we're just blindly
 ignoring signals like this.  I also think that I need to go and do
 this everywhere we have a non-restarted interruptable blocking system
 call.

 Now, I'd like to get this fixed today, as it's high time for another
 snapshot of the JRE and HDK, but w/o it, Tomcat runs for 2 seconds at
 best :)

 So - does anyone have any other bright ideas?  Why don't we see this
 with J9?Would it be better to do a per-thread signal mask after
 asking the thread manager what signal it's using du jour?  (Andrey
 noted that Sun allows one to change the signals used, apparently to
 prevent collision w/ user code vi JNI, I guess...)

 geir




 -
 Terms of use : http://incubator.apache.org/harmony/mailing.html
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




--
Paulex Yang
China Software Development Lab
IBM



-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-08-31 Thread Geir Magnusson Jr.


On Aug 31, 2006, at 3:03 AM, Jimmy, Jing Lv wrote:


Alexey Varlamov wrote:

Guys,
Probably I missed that thread on InterruptibleChannel implementation,
but I've just hit on the following code in
java.nio.channels.spi.AbstractInterruptibleChannel:
static {
try {
setInterruptAction = AccessController
.doPrivileged(new PrivilegedExceptionActionMethod() {
public Method run() throws Exception {return
Thread.class.getDeclaredMethod(setInterruptAction, 
new Class[] {

Runnable.class });
}
});
setInterruptAction.setAccessible(true);
} catch (Exception e) {
// FIXME: be accomodate before VM actually provides
// setInterruptAction method
// throw new Error(e);
}
}
There are no docs on j.l.Thread.setInterruptAction()... Does this  
code

snippet relate to the subject of this discussion?


Hi,

The SIGUSR2 is much more powerful than I think. If it can  
really break select operation without other harmful side-effect, I  
believe it is a good way to Interrupt Channel.
IIRC, setInterruptAction is used if VM can not interrupt some I/ 
O blocking operation, like select(), so it set a callback and ask  
classlib method to stop them(close fd, etc). But if SIGUSR2 works  
so well, I doubt it is not necessary then.
BTW, can it break socket read/write or other blocking operation  
as well? (I'm very interested in how does it work, as common thread  
mechanism know nothing how to stop a certain I/O :) )


Yes, it's one of the 'features' of signals in unix.   So read() and  
write() are also affected - they can return from a blocking operation  
with nothing read and errno set to EINTR.


SIGUSR2 is not in itself any more powerful than SIGUSR1 - they all  
have the same effect, namely a software interrupt.


I looked in DRLVM and it appears that the right thing is being done -  
namely the sighandler is being setup w/ the SA_RESTART flag, so that  
system calls that can be restarted are restarted.  Experimentation on  
ubuntu shows that read() can be dealt with this way, but select()  
doesn't appear to be able to...  IOW, I can get it so signals are  
caught and handled and read() is automatically restarted - it doesn't  
complete on the signal and therefore never appears to me to be  
interrupted,  where I cant' get select() to behave that way it  
always completes when a signal is caught.


This is consistent with Stevens, although he notes that in SVR4,  
select() is restarted. :/  Of course Stevens is pre-linux, and still  
talks about modems.  It's truly a great reference for this, but would  
be nice if it was up-to-date wrt linux.  The problem is that the  
author died a few years ago...


So I don't know what to do.  I'm hoping someone can tell us how J9  
does this - the obvious answer is that J9 doesn't use any signals,  
but I'm not sure if I buy that yet.


If we employ the patch, then our socket listening code can't be  
interrupted, and I'm pretty uncomfortable with that.


geir





-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-08-31 Thread Anton Luht

Hello,

Behaviour of select() with SA_RESTART can vary by platform - see [1]

---quote begins
[EINTR]
The select() function was interrupted before any of the selected events
occurred and before the timeout interval expired. If SA_RESTART has been set
for the interrupting signal, it is implementation-dependent whether select()
restarts or returns with [EINTR].
---quote ends

Thus, I think Artem's patch is correct - it just make behaviour of
select() not dependent on the underlying platform - the call is
restarted just like read() and write() do.

[1] http://www.opengroup.org/onlinepubs/007908799/xsh/select.html

On 8/31/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:


On Aug 31, 2006, at 3:03 AM, Jimmy, Jing Lv wrote:

 Alexey Varlamov wrote:
 Guys,
 Probably I missed that thread on InterruptibleChannel implementation,
 but I've just hit on the following code in
 java.nio.channels.spi.AbstractInterruptibleChannel:
 static {
 try {
 setInterruptAction = AccessController
 .doPrivileged(new PrivilegedExceptionActionMethod() {
 public Method run() throws Exception {return
 Thread.class.getDeclaredMethod(setInterruptAction,
 new Class[] {
 Runnable.class });
 }
 });
 setInterruptAction.setAccessible(true);
 } catch (Exception e) {
 // FIXME: be accomodate before VM actually provides
 // setInterruptAction method
 // throw new Error(e);
 }
 }
 There are no docs on j.l.Thread.setInterruptAction()... Does this
 code
 snippet relate to the subject of this discussion?

 Hi,

 The SIGUSR2 is much more powerful than I think. If it can
 really break select operation without other harmful side-effect, I
 believe it is a good way to Interrupt Channel.
 IIRC, setInterruptAction is used if VM can not interrupt some I/
 O blocking operation, like select(), so it set a callback and ask
 classlib method to stop them(close fd, etc). But if SIGUSR2 works
 so well, I doubt it is not necessary then.
 BTW, can it break socket read/write or other blocking operation
 as well? (I'm very interested in how does it work, as common thread
 mechanism know nothing how to stop a certain I/O :) )

Yes, it's one of the 'features' of signals in unix.   So read() and
write() are also affected - they can return from a blocking operation
with nothing read and errno set to EINTR.

SIGUSR2 is not in itself any more powerful than SIGUSR1 - they all
have the same effect, namely a software interrupt.

I looked in DRLVM and it appears that the right thing is being done -
namely the sighandler is being setup w/ the SA_RESTART flag, so that
system calls that can be restarted are restarted.  Experimentation on
ubuntu shows that read() can be dealt with this way, but select()
doesn't appear to be able to...  IOW, I can get it so signals are
caught and handled and read() is automatically restarted - it doesn't
complete on the signal and therefore never appears to me to be
interrupted,  where I cant' get select() to behave that way it
always completes when a signal is caught.

This is consistent with Stevens, although he notes that in SVR4,
select() is restarted. :/  Of course Stevens is pre-linux, and still
talks about modems.  It's truly a great reference for this, but would
be nice if it was up-to-date wrt linux.  The problem is that the
author died a few years ago...

So I don't know what to do.  I'm hoping someone can tell us how J9
does this - the obvious answer is that J9 doesn't use any signals,
but I'm not sure if I buy that yet.

If we employ the patch, then our socket listening code can't be
interrupted, and I'm pretty uncomfortable with that.

geir





-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





--
Regards,
Anton Luht,
Intel Middleware Products Division

-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-08-31 Thread Geir Magnusson Jr.



Anton Luht wrote:

Hello,

Behaviour of select() with SA_RESTART can vary by platform - see [1]

---quote begins
[EINTR]
The select() function was interrupted before any of the selected events
occurred and before the timeout interval expired. If SA_RESTART has been 
set
for the interrupting signal, it is implementation-dependent whether 
select()

restarts or returns with [EINTR].
---quote ends

Thus, I think Artem's patch is correct - it just make behaviour of
select() not dependent on the underlying platform - the call is
restarted just like read() and write() do.


Hmmm.

Artem's patch does it for all signals.  You can set the sighandler to 
SA_RESTART on a *per signal* basis.  So there's a difference.  I'm not 
sure if it's a meaningful difference, but it's there.


geir




[1] http://www.opengroup.org/onlinepubs/007908799/xsh/select.html

On 8/31/06, Geir Magnusson Jr. [EMAIL PROTECTED] wrote:


On Aug 31, 2006, at 3:03 AM, Jimmy, Jing Lv wrote:

 Alexey Varlamov wrote:
 Guys,
 Probably I missed that thread on InterruptibleChannel implementation,
 but I've just hit on the following code in
 java.nio.channels.spi.AbstractInterruptibleChannel:
 static {
 try {
 setInterruptAction = AccessController
 .doPrivileged(new PrivilegedExceptionActionMethod() {
 public Method run() throws Exception {return
 Thread.class.getDeclaredMethod(setInterruptAction,
 new Class[] {
 Runnable.class });
 }
 });
 setInterruptAction.setAccessible(true);
 } catch (Exception e) {
 // FIXME: be accomodate before VM actually provides
 // setInterruptAction method
 // throw new Error(e);
 }
 }
 There are no docs on j.l.Thread.setInterruptAction()... Does this
 code
 snippet relate to the subject of this discussion?

 Hi,

 The SIGUSR2 is much more powerful than I think. If it can
 really break select operation without other harmful side-effect, I
 believe it is a good way to Interrupt Channel.
 IIRC, setInterruptAction is used if VM can not interrupt some I/
 O blocking operation, like select(), so it set a callback and ask
 classlib method to stop them(close fd, etc). But if SIGUSR2 works
 so well, I doubt it is not necessary then.
 BTW, can it break socket read/write or other blocking operation
 as well? (I'm very interested in how does it work, as common thread
 mechanism know nothing how to stop a certain I/O :) )

Yes, it's one of the 'features' of signals in unix.   So read() and
write() are also affected - they can return from a blocking operation
with nothing read and errno set to EINTR.

SIGUSR2 is not in itself any more powerful than SIGUSR1 - they all
have the same effect, namely a software interrupt.

I looked in DRLVM and it appears that the right thing is being done -
namely the sighandler is being setup w/ the SA_RESTART flag, so that
system calls that can be restarted are restarted.  Experimentation on
ubuntu shows that read() can be dealt with this way, but select()
doesn't appear to be able to...  IOW, I can get it so signals are
caught and handled and read() is automatically restarted - it doesn't
complete on the signal and therefore never appears to me to be
interrupted,  where I cant' get select() to behave that way it
always completes when a signal is caught.

This is consistent with Stevens, although he notes that in SVR4,
select() is restarted. :/  Of course Stevens is pre-linux, and still
talks about modems.  It's truly a great reference for this, but would
be nice if it was up-to-date wrt linux.  The problem is that the
author died a few years ago...

So I don't know what to do.  I'm hoping someone can tell us how J9
does this - the obvious answer is that J9 doesn't use any signals,
but I'm not sure if I buy that yet.

If we employ the patch, then our socket listening code can't be
interrupted, and I'm pretty uncomfortable with that.

geir





-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]







-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[classlib][luni] signalis interruptus in hysock

2006-08-30 Thread Geir Magnusson Jr.
Time to take another run at this since I didn't get any responses on  
the drlvm thread.


We have the problem that DRLVM uses SIGUSR2 in the thread manager  
(not an unreasonable thing to do, I believe) but this results in  
knocking threads out of select() in hysock.c (and I'm sure we'll see  
it in other places.)


Now, I'm not sure what the right course of action is.  We have a  
suggested patch from Artem that suggests we just ignore when the  
tread is interrupted :


--- modules/luni/src/main/native/port/linux/hysock.c
+++ modules/luni/src/main/native/port/linux/hysock.c
@@ -2570,11 +2570,16 @@ hysock_select (struct HyPortLibrary * po
  I_32 rc = 0;
  I_32 result = 0;

-  result =
+  do
+  {
+result =
select (nfds, readfds == NULL ? NULL : readfds-handle,
writefds == NULL ? NULL : writefds-handle,
exceptfds == NULL ? NULL : exceptfds-handle,
timeout == NULL ? NULL : timeout-time);
+  }
+  while (result == -1  errno == EINTR);
+
  if (result == -1)
{
  rc = errno;


this works, but I'm bothered by the fact that we're just blindly  
ignoring signals like this.  I also think that I need to go and do  
this everywhere we have a non-restarted interruptable blocking system  
call.


Now, I'd like to get this fixed today, as it's high time for another  
snapshot of the JRE and HDK, but w/o it, Tomcat runs for 2 seconds at  
best :)


So - does anyone have any other bright ideas?  Why don't we see this  
with J9?Would it be better to do a per-thread signal mask after  
asking the thread manager what signal it's using du jour?  (Andrey  
noted that Sun allows one to change the signals used, apparently to  
prevent collision w/ user code vi JNI, I guess...)


geir




-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-08-30 Thread Gregory Shimansky
On Wednesday 30 August 2006 19:29 Geir Magnusson Jr. wrote:
 So - does anyone have any other bright ideas?  Why don't we see this
 with J9?Would it be better to do a per-thread signal mask after
 asking the thread manager what signal it's using du jour?  (Andrey
 noted that Sun allows one to change the signals used, apparently to
 prevent collision w/ user code vi JNI, I guess...)

I could be mistaken but I think pthread_kill which is supposed to signal just 
a single thread works in a following way - it kills the whole process but 
allows the signal to just one thread. The blocking calls like select are 
interrupted anyway since signal is process wide and there is no way to make 
it interrupt only one thread.

-- 
Gregory Shimansky, Intel Middleware Products Division

-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: [classlib][luni] signalis interruptus in hysock

2006-08-30 Thread Geir Magnusson Jr.


On Aug 30, 2006, at 8:04 PM, Gregory Shimansky wrote:


On Wednesday 30 August 2006 19:29 Geir Magnusson Jr. wrote:

So - does anyone have any other bright ideas?  Why don't we see this
with J9?Would it be better to do a per-thread signal mask after
asking the thread manager what signal it's using du jour?  (Andrey
noted that Sun allows one to change the signals used, apparently to
prevent collision w/ user code vi JNI, I guess...)


I could be mistaken but I think pthread_kill which is supposed to  
signal just
a single thread works in a following way - it kills the whole  
process but
allows the signal to just one thread. The blocking calls like  
select are
interrupted anyway since signal is process wide and there is no way  
to make

it interrupt only one thread.


Right - I was thinking a per-thread signal mask...

geir



--
Gregory Shimansky, Intel Middleware Products Division

-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




-
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]