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 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 ====

The problem is, this testcase works fine, even on 2008 R2.  It must
have something to do with the way Perl creates thread or does its
own exception handling.  I just don't know what to look for.


Corinna


(*) http://cygwin.com/acronyms/#STC

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

--
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]