threads / patch / 33024

patchRe: [PATCH] Improve QNX support in GIT

Subject: Re: [PATCH] Improve QNX support in GIT

## tl;dr

4 messages between Feb 26, 2013 and Feb 26, 2013. Diffs are folded; open one to read it.

replies: 3people: 3as markdown or json

Matt Kraai· Feb 26, 2013, 20:13 UTC · lore
Hi,

Please include me in the Cc field, since I'm not subscribed to the list.

Mike Gorchak wrote:
> Do you have a testcase for this (without using git codebase)? I wrote
> numerous resource managers since QNX 6.0 using threads and fork()s for
> daemonization in different order and never experienced a problems.
> There can be issues with pipes in case of external command run.
I just created the following one:

#include <pthread.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <process.h>

static void *
start_routine (void *arg)
{
  return NULL;
}
int
main (int argc, char **argv)
{
  int err;
  if ((err = pthread_create (NULL, NULL, start_routine, NULL)))
    {
      fprintf (stderr, "foo: pthread_create failed: %s\n", strerror (errno));
      return 1;
    }
  if (fork () == -1)
    {
      fprintf (stderr, "foo: fork failed: %s\n", strerror (errno));
      return 1;
    }
  return 0;
}

When I compile and run it on either QNX 6.3.2 or QNX 6.5.0, it produces the following output:

 foo: fork failed: Function not implemented

If I remove the call to pthread_create, it doesn't output anything and exits successfully.

Mike Gorchak· Feb 26, 2013, 20:32 UTC · re: Matt Kraai · lore
> If I remove the call to pthread_create, it doesn't output anything and
> exits successfully.

I see. Most resource managers use procmgr_daemon(), which has no such limitation. Anyway, as far as I can see current git sources do not use fork together with pthread, except for daemonize() function.

Johannes Sixt· Feb 26, 2013, 20:53 UTC · re: Mike Gorchak · lore
Am 26.02.2013 21:32, schrieb Mike Gorchak:
Show 6 quoted lines
>> If I remove the call to pthread_create, it doesn't output anything and
>> exits successfully.
> 
> I see. Most resource managers use procmgr_daemon(), which has no such
> limitation. Anyway, as far as I can see current git sources do not use
> fork together with pthread, except for daemonize() function.

Not true: When a clean or smudge filter is configured, a thread is created, and the thread runs the external program via fork().

-- Hannes
Matt Kraai· Feb 26, 2013, 21:02 UTC · re: Mike Gorchak · lore
On Tue, Feb 26, 2013 at 10:32:16PM +0200, Mike Gorchak wrote:
> I see. Most resource managers use procmgr_daemon(), which has no such
> limitation. Anyway, as far as I can see current git sources do not use
> fork together with pthread, except for daemonize() function.
If threads are enabled, git does use fork after calling pthread_create:
 * When I run "git grep foo".
 * When I run "git fetch" to update my git working copy, which is
   using an HTTPS remote.
Both of these commands fail as a result.

← back to recent threads