This is the mail archive of the cygwin-patches 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]

[PATCH] Faster process initialization


This patch speeds up process initialization on 64-bit systems. Maybe
the comment "Initialize signal processing here ..." should be re-worded
or removed completely.

The speed difference can be noticeable.
"while (true); do date; done | uniq -c" manages more than 3 times more
"date" executions per second on my system.


2010-09-01 Magnus Holmgren <magnushol@gmail.com>


	* dcrt0.cc (dll_crt0_0): Remove call to sigproc_init. It creates
	a thread, and execution of that thread can be delayed during
	DLL init, slowing things down (seen on 64-bit systems).
	(dll_crt0_1): Always call sigproc_init.


Index: src/winsup/cygwin/dcrt0.cc =================================================================== RCS file: /cvs/src/src/winsup/cygwin/dcrt0.cc,v retrieving revision 1.382 diff -u -p -r1.382 dcrt0.cc --- src/winsup/cygwin/dcrt0.cc 30 Aug 2010 23:23:28 -0000 1.382 +++ src/winsup/cygwin/dcrt0.cc 1 Sep 2010 17:49:26 -0000 @@ -740,11 +740,9 @@ dll_crt0_0 () } }

-  /* Initialize signal processing here, early, in the hopes that the creation
-     of a thread early in the process will cause more predictability in memory
-     layout for the main thread. */
-  if (!dynamically_loaded)
-    sigproc_init ();
+  /* Don't initialize signal processing here. It creates a thread, and
+     execution of threads created during DLL initialization can be
+     delayed (e.g., on 64-bit Windows Vista and Windows 7) */

user_data->threadinterface->Init ();

@@ -789,8 +787,10 @@ dll_crt0_1 (void *)
 {
   extern void initial_setlocale ();

-  if (dynamically_loaded)
-    sigproc_init ();
+  /* Initialize signal processing here, early, in the hopes that the creation
+     of a thread early in the process will cause more predictability in memory
+     layout for the main thread. */
+  sigproc_init ();
   check_sanity_and_sync (user_data);

/* Initialize malloc and then call user_shared_initialize since it relies

--
  Magnus


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