This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: perl threads on 2008 R2 64bit = crash ( was: perl 5.10 threads on 1.5.25 = instant crash )


On Wed, Jul 15, 2009 at 05:21:39PM +0200, Corinna Vinschen wrote:
>On Jul 15 01:41, Steven Hartland wrote:
>>
>> ----- Original Message ----- From: "Christopher Faylor" 
>> <cgf-use...>
>
>http://cygwin.com/acronyms/#PCYMTNQREAIYR
>
>>> On Wed, Jul 15, 2009 at 12:36:56AM +0100, Steven Hartland wrote:
>>>> This may or may not help:
>>>>
>>>> According to VC++ debugger it always dies with:
>>>> Unhandled exception at 0x610d089d in perl.exe: 0xC0000005: Access violation reading location 0x00000004.
>>>
>>> No, sorry, it really doesn't help.  The VC++ debugger doesn't know how
>>> to handle cygwin exceptions.
>>
>> Was just trying to get a hint of the area of the problem since gdb doesn't
>> actually break when it happens this seemed to be the only way to get that
>> info.
>>
>> Any pointers on how I can help narrow down the issue?
>
>I can reproduce the problem on my 2008 R2 box.  It works fine on Windows
>7 x64, though, so it's a Server thingy.
>
>What happens is that this statement
>
>  if ((*object)->magic != magic)
>
>in the function thread.cc:verifyable_object_isvalid throws an exception
>because *object is NULL.  This should be covered by the myfault handler
>in this function but for some reason it isn't.
>
>To debug this further I created a STC(TM)(*) which does the same as the
>Perl testcase, just in pure C:
>
>==== SNIP ====
>#include <stdio.h>
>#include <errno.h>
>#include <pthread.h>
>
>pthread_attr_t attr;
>
>void *thr (void *arg)
>{
>  printf ("I'm a thread\n");
>  return NULL;
>}
>
>int main()
>{
>  pthread_t t;
>  int i, r;
>  void *ret;
>
>  fprintf (stderr, "Testing threads...\n");
>  i = pthread_attr_init (&attr);
>  printf ("i = %d\n", i);
>  r = pthread_create (&t, &attr, thr, NULL);
>  if (r)
>    fprintf (stderr, "pthread_create: %d %s\n", errno, strerror (errno));
>  else
>    pthread_join (t, &ret);
>  fprintf (stderr, "Testing done\n");
>  return 0;
>}
>==== SNAP ====

I can't try this right now myself but what about trying various settings
for a SIGSEGV signal handler?

cgf

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]