Skip to content

Commit

Permalink
Update comments.
Browse files Browse the repository at this point in the history
  • Loading branch information
Christopher Faylor committed Jul 16, 2000
1 parent 92e30b7 commit c77c441
Showing 1 changed file with 14 additions and 15 deletions.
29 changes: 14 additions & 15 deletions winsup/cygwin/dll_init.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,6 @@ extern void __stdcall check_sanity_and_sync (per_process *);
dll_list NO_COPY dlls;

static NO_COPY int in_forkee = 0;
/* local variables */

//-----------------------------------------------------------------------------

static int dll_global_dtors_recorded = 0;

/* Run destructors for all DLLs on exit. */
Expand Down Expand Up @@ -95,7 +91,7 @@ dll_list::operator[] (const char *name)

#define RETRIES 100

/* Allocate space for a dll struct after the just-loaded dll. */
/* Allocate space for a dll struct contiguous with the just-loaded dll. */
dll *
dll_list::alloc (HINSTANCE h, per_process *p, dll_type type)
{
Expand All @@ -119,29 +115,32 @@ dll_list::alloc (HINSTANCE h, per_process *p, dll_type type)
if (!VirtualQuery (s, &m, sizeof (m)))
return NULL; /* Can't do it. */
if (m.State == MEM_FREE)
break;
break; /* Found some free space */
s = (char *) m.BaseAddress + m.RegionSize;
}

/* Couldn't find any. Uh oh. FIXME: Issue an error? */
if (i == RETRIES)
return NULL; /* Oh well */
return NULL; /* Oh well. Couldn't locate free space. */

SYSTEM_INFO s1;
GetSystemInfo (&s1);

/* Need to do the shared memory thing since W95 can't allocate in
the shared memory region otherwise. */
/* Ensure that this is rounded to the nearest page boundary.
FIXME: Should this be ensured by VirtualQuery? */
DWORD n = (DWORD) m.BaseAddress;
DWORD r = n % s1.dwAllocationGranularity;

if (r)
n = ((n - r) + s1.dwAllocationGranularity);

/* First reserve the area of memory, then commit it. */
if (VirtualAlloc ((void *) n, sizeof (dll), MEM_RESERVE, PAGE_READWRITE))
d = (dll *) VirtualAlloc ((void *) n, sizeof (dll), MEM_COMMIT, PAGE_READWRITE);

/* Did we succeed? */
if (d == NULL)
{
{ /* Nope. */
#ifdef DEBUGGING
system_printf ("VirtualAlloc failed for %p, %E", n);
#endif
Expand Down Expand Up @@ -189,7 +188,7 @@ dll_list::detach (dll *d)
}
}

/* Initialization called by dll_crt0_1. */
/* Initialization for all linked DLLs, called by dll_crt0_1. */
void
dll_list::init ()
{
Expand Down Expand Up @@ -256,7 +255,6 @@ release_upto (const char *name, DWORD here)
}
}

#define MAX_DLL_SIZE (sizeof (dll))
/* Reload DLLs after a fork. Iterates over the list of dynamically loaded DLLs
and attempts to load them in the same place as they were loaded in the parent. */
void
Expand All @@ -271,9 +269,10 @@ dll_list::load_after_fork (HANDLE parent, dll *first)
{
DWORD nb;
/* Read the dll structure from the parent. */
if (!ReadProcessMemory (parent, next, &d, MAX_DLL_SIZE, &nb) ||
nb != MAX_DLL_SIZE)
if (!ReadProcessMemory (parent, next, &d, sizeof (dll), &nb) ||
nb != sizeof (dll))
return;

/* We're only interested in dynamically loaded dlls.
Hopefully, this function wouldn't even have been called unless
the parent had some of those. */
Expand All @@ -286,7 +285,7 @@ dll_list::load_after_fork (HANDLE parent, dll *first)
It sort of stinks that we can't invert the order of the FreeLibrary
and LoadLibrary since Microsoft documentation seems to imply that that
should do what we want. However, since the library was loaded above,
The second LoadLibrary does not execute it's startup code unless it
the second LoadLibrary does not execute it's startup code unless it
is first unloaded. */
if (h == d.handle)
{
Expand Down

0 comments on commit c77c441

Please sign in to comment.