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: cygwin > 1.7.9: Segmentation faults / STATUS_STACK_OVERFLOW


Hi Corinna,

ok, the STATUS_STACK_OVERFLOW problem is solved. Seems like a local variable with about 540 KiB caused the overflow. The Cygwin Shell gives me 2034 for "limit -s" Is that the correct maximum stack size in KiB that is relevant for me?

Now about the segmentation fault. It seems like the problem only occurs when calling glob in an own thread, using some special search string and only during gdb debugging. See the test case below, I hope it helps.

Thanks in advance.

Regards,
Manuel


#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <pthread.h>
#include <glob.h>

pthread_t threadId;

void * callGlob(void * data)
{
  glob_t    info;
  int i;
  char searchStr[] = "/proc/[0-9]*/cmdline"; // Crashing on debug
  //char searchStr[] = "/proc/1234/cmdline";
  //char searchStr[] = "*.no";
  //char searchStr[] = "./Debug/*.exe";

  glob(searchStr, GLOB_NOSORT, NULL, &info );
  printf("Found %d files.\n", info.gl_matchc);
  for (i=0; i<info.gl_matchc; i++)
  {
    printf("Found: %s\n", info.gl_pathv[i]);
  }
  globfree(&info);
  return NULL;
}

int main(void)
{
  int ret;
  puts("Starting test");

#if 0
  // Working fine if called in the main thread.
  callGlob(NULL);
#else
  // Not working if called in another thread.
  ret = pthread_create(&threadId, NULL, callGlob, NULL);
  if( ret != 0 )
  {
    printf("pthread_create failed: %s %d\n",sys_errlist[ret],ret);
    return(EXIT_FAILURE);
  }
#endif

  printf("Waiting for thread.\n");
  pthread_join(threadId, NULL);
  printf("Thread finished.\n");

  return EXIT_SUCCESS;
}

> -----Original Message-----
> From: Corinna Vinschen
> Sent: Tuesday, February 07, 2012 5:46 PM
> Subject: Re: cygwin > 1.7.9: Segmentation faults / STATUS_STACK_OVERFLOW
> 
> On Feb  7 17:31, Manuel Wienand wrote:
> > Hi,
> >
> > I have the problem that I get a segmentation fault on the newer versions of
> the cygwin1.dll when debugging and a STATUS_STACK_OVERFLOW exception when
> running without debugger.
> > I did an update of my cygwin stuff on Monday, and I'm using the latest
> snapshot dll. I'm quite sure it has something to do with the dll, because I
> did clean and rebuild with newest
> > cygwin versions. Since this wasn't working, I got my old dll (from
> 29.03.2011) and it worked again. ÂI tried some other snapshot versions (up to
> 04.06.2011, since there are no old ones),
> > but none of them worked.
> >
> > If I can get older snapshot versions, I might be able to track it down. But
> then again stack problems are hard to catch.
> > I compiled my code with -fstack-protector-all --param ssp-buffer-size=4, but
> this didn't help me so far (well, maybe I'm not using it right.).
> >
> > Stacktrace of the first segmentation fault:
> > Thread [11] 0 (Suspended : Signal : SIGSEGV:Segmentation fault)
> > _alloca() at ../../../libgcc/../gcc/config/i386/cygwin.asm:45 0x6116fd02
> > __small_vswprintf() at /netrel/src/cygwin-snapshot-20120202-
> 1/winsup/cygwin/smallprint.cc:369 0x610dbdfe
> > 0x0
> 
> Can you please create a simple testcase, in plain C, which allows to
> reproduce the problem with minimal code?
> 
> 
> Thanks,
> Corinna
> 
> --
> 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
> 
> 
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.


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