Greetings, and thanks so much for the feedback!

I watched the build, and it hung on a single step early on for 6h.
There is an instability forking children reliably.  I've seen this come
and go on my machine.

Here is the relevant code, back from several years ago when cygwin was
32bit.  The first branch should work unmodified, but posix_spawnp fails
with 'no error', hence the ifdef.  I have likewise seen the
CreateProcess fail, but much less frequently.

At the point of failure, the program was trying to run 'ar x libfoo.a'
in a child and simply hung.

Suggestions?

Take care,

=============================================================================
#if !defined(__CYGWIN__)

int
vsystem(char *command) {

  char *c;
  const char *x1[]={"/bin/sh","-c",NULL,NULL},*spc=" \n\t",**p1,**pp,**pe;
  int s;
  pid_t pid;
  posix_spawnattr_t attr;
  posix_spawn_file_actions_t file_actions;
  extern char **environ;

  if (strpbrk(command,"\"'$<>"))

    (p1=x1)[2]=command;

  else {

    p1=(void *)FN2;
    pe=p1+sizeof(FN2)/sizeof(*p1);
    for (pp=p1,c=command;pp<pe && (*pp=strtok(c,spc));c=NULL,pp++);
    massert(pp<pe);

  }

  massert(!posix_spawn_file_actions_init(&file_actions));
  massert(!posix_spawnattr_init(&attr));

  massert(!posix_spawnp(&pid, *p1, &file_actions, &attr,  (void *)p1, environ));

  massert(!posix_spawnattr_destroy(&attr));
  massert(!posix_spawn_file_actions_destroy(&file_actions));

  massert(pid>0);
  massert(pid==waitpid(pid,&s,0));

  if ((s>>8)&128)
    emsg("execvp failure when executing '%s': 
%s\n",command,strerror((s>>8)&0x7f));

  return s;

}
#elif defined(__CYGWIN__)

#include <tchar.h>
#include <time.h>
#include <windows.h>
#include <sys/cygwin.h>

int
vsystem(const char *command) {

  STARTUPINFO s={0};
  PROCESS_INFORMATION p={0};
  unsigned int e;
  char *cmd=NULL,*r;

  massert((r=strpbrk(command," \n\t"))-command<sizeof(FN2));
  memcpy(FN2,command,r-command);
  FN2[r-command]=0;
  cygwin_conv_path(CCP_POSIX_TO_WIN_A,FN2,FN3,sizeof(FN3));
  massert(snprintf(FN1,sizeof(FN1),"%s %s",FN3,r)>=0);
  command=FN1;


  s.cb=sizeof(s);
  massert(CreateProcess(cmd,(void *)command,NULL,NULL,FALSE,0,NULL,NULL,&s,&p));
  massert(!WaitForSingleObject(p.hProcess,INFINITE));
  massert(GetExitCodeProcess(p.hProcess,&e));
  massert(CloseHandle(p.hProcess));
  massert(CloseHandle(p.hThread));

  return e;

}



Brian Inglis <brian.ing...@systematicsw.ab.ca> writes:

> It looks like your GH build was cancelled hitting the 6 hour job limit!
>
> How long did the build take in your VB VM?
>
> If you look at the bottom of the Summary log page, you can download
> the build Artifacts, as well as the log archive from within the build
> log window.
>
> But it looks like your enemy here is time, so you need to look at all
> the log timestamps, and do anything you can to increase caching and
> parallelism, maybe:
>
>       MAKEOPTS+="-j "         # "unlimited" jobs
>
> I have also had to force that in src_test to speed up massive numbers of 
> tests:
>
>       MAKEFLAGS+="-j " cygtest        # "unlimited" jobs

-- 
Camm Maguire                                        c...@maguirefamily.org
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah

Reply via email to