This is the mail archive of the cygwin-developers@sourceware.cygnus.com mailing list for the Cygwin project. See the Cygwin home page for more information.
Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: cygwin1.dll startup and GDB


DJ,
	Either way, mapname will be NULL since NULL is being passed as the
first parameter to open_shared.
My understanding ( misunderstanding :) ) was that with OpenFileMapping()
a name for the shared memory was needed.  However, we are passing a NULL
pointer to it instead...

Is OpenFileMappingA() different.  I only have a reference for
OpenFileMapping().

This is the sequence...

hinfo.cc
244             fh = new (buf) fhandler_console (name);

fhandler_console.cc
37        return tty_stuff = (tty_min *) open_shared (NULL,
console_shared_h,
38                                                    sizeof
(*tty_stuff), NULL)


void *
open_shared (const char *name, HANDLE &shared_h, DWORD size, void *addr)
{
  void *shared;

  if (!shared_h)
    {
      char *mapname = name ? shared_name (name, 0) : NULL;

      shared_h = OpenFileMappingA (FILE_MAP_READ | FILE_MAP_WRITE,
                                   TRUE, mapname);

      if (!shared_h &&
          !(shared_h = CreateFileMappingA ((HANDLE) 0xffffffff,
                                           &sec_all,
                                           PAGE_READWRITE,
                                           0,
                                           size,
                                           mapname)))
        api_fatal ("CreateFileMappingA, %E.  Terminating.");
    }

...

DJ Delorie wrote:
> 
> Looks like OpenFileMapping() doesn't properly check its parameters.
> Try rearranging the code like this:
> 
>         char *mapname = NULL;
>         if (name)
>         {
>           mapname = shared_name (name, 0);
>           shared_h = OpenFileMappingA (FILE_MAP_READ | FILE_MAP_WRITE,
>                                        TRUE, mapname);
>         }
>         if (!shared_h &&
>             !(shared_h = CreateFileMappingA ((HANDLE) 0xffffffff,
>                                              &sec_all,
> 
> If this works, mail me a diff for the final source and I'll apply it.
> 
> DJ