New test.
[mono.git] / mono / io-layer / ChangeLog
1 2010-03-26  Zoltan Varga  <vargaz@gmail.com>
2
3         * sockets.c: Apply some openbsd changes from openbsd ports.
4
5 2010-03-26  Zoltan Varga  <vargaz@gmail.com>
6
7         * shared.c: Disable shared supported by default, it can be enabled by setting
8         the MONO_ENABLE_SHM env variable.
9
10 2009-03-22 Rodrigo Kumpera  <rkumpera@novell.com>
11
12         * threads.h: Add wapi_self_interrupt.
13
14         * wthreads.c: Add wapi_self_interrupt which puts the current
15         thread in interrupted state.
16
17         * wthreads.c (wapi_thread_clear_wait_handle): Previous handle
18         can possibly be NULL if an async interrupt cleared it.
19
20         This is safe because it is only async cleared if running inside a
21         handler block.
22
23 2010-03-06 Gonzalo Paniagua Javier <gonzalo@novell.com>
24
25         * processes.c: made ShellExecuteEx actually work when the file name to
26         execute is quoted. Display a message intead of blindly ignoring the
27         result of g_shell_parse_argv(). Fixes bug #385497.
28
29 2010-03-05  Zoltan Varga  <vargaz@gmail.com>
30
31         * shared.c (shm_semaphores_init): Applied patch from Cal Page
32         (age.cal@gmail.com). Fix support for USE_SHM.
33
34 2010-02-25  Geoff Norton  <gnorton@novell.com>
35
36         * wait.c: If any of our handles are shared, we need to do
37         a polling wait so we're notified of the signal change.
38
39 Wed Feb 24 16:01:37 CET 2010 Paolo Molaro <lupus@ximian.com>
40
41         * Makefile.am: don't install the headers anymore, they are private.
42
43 2010-02-20  Zoltan Varga  <vargaz@gmail.com>
44
45         * versioninfo.c (VerLanguageName): Remove code duplication a bit.
46
47 2009-12-02  Miguel de Icaza  <miguel@novell.com>
48
49         * processes.c (EnumProcesses): Add support for OSX, patch from Tom
50         Philpot <tom.philpot@logos.com>
51
52 2009-11-30  Carlos Alberto Cortez <calberto.cortez@gmail.com>
53
54         * io.cs: In CopyFile check if the destination already exists before
55         trying to open it, and if it is the same as the source, report an error,
56         just as .net does. We do the check here to take advantage of the IOMAP
57         capability.
58         Fixes #510230.
59
60 2009-11-13 Jonathan Chambers <joncham@gmail.com>
61
62         * mono-mutex.h: Implementation for Windows platform.
63         
64         Code contributed under MIT/X11 license.
65
66 2009-11-13  Zoltan Varga  <vargaz@gmail.com>
67
68         * processes.c: Include mono-path.h.
69
70 2009-11-12  Geoff Norton  <gnorton@novell.com>
71
72         * processes.c: match_procname_to_modulename should resolve
73         symlinks when checking if two process modules match.
74
75 2009-11-04 Jonathan Chambers <joncham@gmail.com>
76
77         * mono-mutex.h: Add skeleton implementation for Windows platform.
78         
79         Code contributed under MIT/X11 license.
80
81 2009-10-21 Gonzalo Paniagua Javier <gonzalo@novell.com>
82
83         * sockets.[ch]: fix function definition.
84
85 2009-10-21 Gonzalo Paniagua Javier <gonzalo@novell.com>
86
87         * sockets.[ch]: added TransmitFile implementation.
88
89 2009-10-04  Zoltan Varga  <vargaz@gmail.com>
90
91         * processes.c: Implement get_process_name_from_proc () on solaris.
92
93 2009-09-24  Zoltan Varga  <vargaz@gmail.com>
94
95         * processes.c (load_modules): Applied patch from Thomas Philpot
96         (tom.philpot@logos.com). Fixes #533893.
97
98 2009-09-15  Jeffrey Stedfast  <fejj@novell.com>
99
100         * io.c (CreateFile): In the directory fallback case, use
101         _wapi_open() again so that IOMAP magic happens.
102         (CopyFile): Need to consistently use _wapi_open() here too.
103         (ReplaceFile): Use _wapi_open() here too and get rid of the
104         fallback code that tried re-opening the file w/o O_TRUNC since
105         there's no reason to do that.
106
107 2009-09-05  Zoltan Varga  <vargaz@gmail.com>
108
109         * handles.c (_wapi_handle_real_new): Call _wapi_process_reap () when running
110         out of shared handes. Fixes #536776.
111
112         * processes.c (CreateProcess): Return false and set the error to
113         ERROR_OUTOFMEMORY when a process handle cannot be created.
114         (ShellExecuteEx): Propagate an ERROR_OUTOFMEMORY error code. Fixes part of
115         #536776.
116
117 2009-09-01  Zoltan Varga  <vargaz@gmail.com>
118
119         * processes.c (EnumProcessModules): Applied patch from Romain Tartière
120         (romain@blogreen.org). Fix this on freebsd/OSX. Fixes #533893.
121
122 2009-08-18  Christian Hergert  <chris@dronelabs.com>
123
124         * wthreads.c: Roll back change for thread-id as it "embraces
125         and extends" the api by passing word-size for thread id on
126         s390 and amd64.
127
128 2009-08-18  Christian Hergert  <chris@dronelabs.com>
129
130         * security.c:
131         * processes.c:
132         * wthreads.c: Be explicit when we are changing word sizes.
133
134 2009-08-18  Christian Hergert  <chris@dronelabs.com>
135
136         * processes.c: Fix method declaration warnings.
137         * sockets.c: getsockopt() wants socklen_t for size.
138
139 2009-08-04  Miguel de Icaza  <miguel@novell.com>
140
141         * posix.c (_wapi_stdhandle_create): Split this into a new file to
142         more easily support non-Posix platforms.
143
144 2009-07-20  Geoff Norton  <gnorton@novell.com>
145
146         * thread-private.h: Use the new mono-semaphore.h.
147
148 2009-06-25 Gonzalo Paniagua Javier <gonzalo@novell.com>
149
150         * sockets.c: add the error number to the message so we can figure out
151         when this happens.
152
153 2009-06-25 Gonzalo Paniagua Javier <gonzalo@novell.com>
154
155         * wait.c: add missing 'break'.
156
157 2009-06-20  Zoltan Varga  <vargaz@gmail.com>
158
159         * atomic.h: Fix ilp32 support on ppc.
160
161 2009-05-28  Mark Probst  <mark.probst@gmail.com>
162
163         * collection.c (_wapi_collection_init): If pthread_create() fails,
164         try again with larger and then with no stack size set.  Fixes
165         #470336.
166
167 2009-05-26  Zoltan Varga  <vargaz@gmail.com>
168
169         * shared.c (_wapi_shm_file): Avoid creating a .wapi directory here, create
170         it in _wapi_shm_file_open (), since platforms using posix shm don't need it.
171
172 2009-05-22  Miguel de Icaza  <miguel@novell.com>
173
174         * wapi_glob.c: Do not need sys/param.h anymore, we now use the
175         POSIX PATH_MAX instead of BSD's MAXPATHLEN
176
177         * handles.c: Do not pull a reference to sockets if they are
178         disabled.
179
180         * sockets.c: Allow for ports to define their own ioctlsocket. 
181
182         * wthreads.c: Remove obsolete code that I recently introudced (the
183         hook for mono_register_thread_attr.
184
185 2009-05-22  Miguel de Icaza  <miguel@novell.com>
186
187         * versioninfo.c: One missing signature, fixed.
188
189 2009-05-21  Miguel de Icaza  <miguel@novell.com>
190
191         * daemon.c: Remove more DEBUG ifdef mess.
192
193         * shared.c (_wapi_shm_attach): Implemention for DISABLE_SHARED_HANDLES 
194
195 2009-05-20  Miguel de Icaza  <miguel@novell.com>
196
197         * sockets.c (ioctlsocket): Move support for MacOS semantics to the
198         ioctlsocket from the ifdef that was previously on metadata/
199
200         * wapi_glob.c (_wapi_glob): Use PATH_MAX from limits.h instead of
201         the BSD name from sys/param.h (MAXPATHLEN)
202
203         Do not include pwd.h as it is not used.
204
205         * thread-private.h: Use indent ifdef style for clarity
206
207         * sockets-wrappers.h: sys/socket.h conditional
208
209         * daemon-messages.h: sys/uio.h conditional.
210
211         * sockets.c: sys/ioctl.h conditional
212
213         * wthreads.c: work around for platforms with no thread fetching
214         information. 
215
216         * versioninfo.c: Use the portable mono_map_ interface instead of
217         using mmap directly and change the style to the Mono style.
218
219         Remove more DEBUG/ifdefs combos
220
221         * shared.c: Split the code to make DISABLE_SHARED remove all the
222         code that does not use the shared handles.   Before it merely
223         removed some of it, with this we avoid hacks on platforms that can
224         not implement it.
225
226         Split the code to reduce the amount of ifdefs.
227
228         Remove #ifdef DEBUG from the source and use a macro instead.
229
230 2009-05-20  Miguel de Icaza  <miguel@novell.com>
231
232         * locking.c: Split locking code into a separate file.
233
234 2009-05-18  Miguel de Icaza  <miguel@novell.com>
235
236         * daemon.c: Move the compile check of MONO_SIZEOF_SUNPATH to the
237         file that uses it.
238
239         * Rename `threads.c' to `wthreads.c' as broken build systems are
240         not able to cope with two files with the same name across multiple
241         directories. 
242
243 2009-05-15  Geoff Norton  <gnorton@novell.com>
244
245         * handles.c: Don't start the collection thread if we've disabled
246         shared handles.
247
248 2009-05-12  Zoltan Varga  <vargaz@gmail.com>
249
250         * collection.c (collection_thread): Get rid of all the ifdefs and
251         gcc attributes, simply return NULL.
252
253 2009-05-11  Zoltan Varga  <vargaz@gmail.com>
254
255         * shared.c: Applied patch from Koushik K. Dutta (koush@koushikdutta.com).
256         Fix the build on android.
257
258 2009-05-09  Miguel de Icaza  <miguel@novell.com>
259
260         * messages.c: Split the scan into common and uncommon messages to
261         allow the messages that are not produced by Mono to be removed on
262         embedded scenarios.
263         
264         * messages.c (message_string): instead of having a gigantic switch
265         table, use a sorted structure in memory and do a binary search on
266         it.
267
268         This reduces the runtime size by 49k and the debugging symbols by
269         400k.
270
271 2009-04-29 Gonzalo Paniagua Javier <gonzalo@novell.com>
272
273         * sockets.c: don't display a warning when connect() fails because the
274         socket was closed in another thread.
275
276 2009-04-23 Rodrigo Kumpera  <rkumpera@novell.com>
277
278         * shared.c: Fix a bunch of memleaks.
279
280 2009-03-27  Zoltan Varga  <vargaz@gmail.com>
281
282         * threads.h: Add a comment to CreateThread.
283
284 2009-03-20  Zoltan Varga  <vargaz@gmail.com>
285
286         * threads.c handles.c wait.c: Change location of gc_wrapper.h.
287
288 2009-02-22  Robert Jordan  <robertj@gmx.net>
289
290         * sockets.c: implement WSASend/WSARecv using sendmsg/recvmsg.
291         Fixes #470021.
292
293         Code is contributed under MIT/X11 license.
294
295 2009-02-20 Gonzalo Paniagua Javier <gonzalo@novell.com>
296
297         * events.c: fix event_signal and namedevent_signal to actually signal
298         the handle.
299
300 2009-02-12 Gonzalo Paniagua Javier <gonzalo@novell.com>
301
302         * io.c: EXDEV when moving directories fails now without creating a
303         file in the destination.
304         Fixes bug #326983.
305
306 2009-02-09  Zoltan Varga  <vargaz@gmail.com>
307
308         * wait.c (WaitForMultipleObjectsEx): Initialize poll variable.
309
310 2009-02-05  Miguel De Icaza  <miguel@novell.com>
311
312         * sockets.c (_wapi_setsockopt): SO_REUSEPORT is needed also on
313         MacOS X.  Fixes bug #471292
314
315 2009-01-29  Zoltan Varga  <vargaz@gmail.com>
316
317         * shared.c: Fall back to file based shared storage if shm_open () fails
318         because /dev/shm is not mounted.
319         
320         * shared.c: Add an alternative implementation using shared memory instead of
321         files. This fixes problems where the mono process would spin up the disk
322         every x secs on laptops. Fixes #434566, #415373 and #321949.
323
324 2009-01-16  Miguel de Icaza  <miguel@novell.com>
325
326         * sockets.c (WSASend): Fix memory leak, and optimize for the case
327         with 1 segment. 
328
329         This should really use writev or sendmsg to use the kernel
330         scatter/gather facility instead of emulating it by copying buffers.
331
332 2009-01-26  Rodrigo Kumpera  <rkumpera@novell.com>
333
334         * critical-sections.h (Enter/LeaveCriticalSection): Show
335         helpfull warning messages before crashing.
336
337 2009-01-26  Rodrigo Kumpera  <rkumpera@novell.com>
338
339         * handles-private.h (_wapi_handle_set_signal_state): Show
340         helpfull warning messages before crashing.
341
342 2009-01-26  Jeffrey Stedfast  <fejj@novell.com>
343
344         * mono-mutex.[c,h]: Removed GPLv2 copyright notice which should
345         not have been there.
346
347 2009-01-20  Rodrigo Kumpera  <rkumpera@novell.com>
348
349         * threads.c: Add wapi_current_thread_desc that produces
350         a string representation of the current thread state.
351
352         * threads.h: Export wapi_current_thread_desc.
353
354 2009-01-18  Zoltan Varga  <vargaz@gmail.com>
355
356         * io.c (GetDiskFreeSpaceEx): Applied patch from Koushik Dutta
357         (koush@koushikdutta.com). Disable this on android.
358
359 2009-01-16  Rodrigo Kumpera  <rkumpera@novell.com>
360
361         * handles.c (_wapi_handle_timedwait_signal_handle): Don't use the
362         set_wait_handle/clear_wait_handle machinery for alertable waits in
363         case of non-alertable waits.
364
365         Non-alertable waits must continue and wait on the cond as this will
366         release the lock. Otherwise this will cause a deadlock as anyone trying
367         to pulse the cond will block trying to acquire the said lock because
368         the thread in non-alertable wait will be busy looping in WaitForSingleObjectEx
369         or similar function, never releasing the lock.
370
371         Thou this fixes quite a few of the hangs introduced by non-pooling alertable
372         waits, the long term plan is to verify if all non-alertable waits really need
373         to be as such.
374
375 2009-01-14  Zoltan Varga  <vargaz@gmail.com>
376
377         * handles-private.h (_wapi_handle_set_signal_state): Set the signalled state
378         of the handle while locking the global signal cond mutex.
379
380         * wait.c (WaitForMultipleObjectsEx): Check the signalled state of handles
381         inside the critical section before waiting, otherwise we could go to waiting
382         even when the handles are already signalled.
383
384 2009-01-13  Zoltan Varga  <vargaz@gmail.com>
385
386         Reapply r122913, this time handling processes by falling back to polling.
387         
388         * handles.c: Rework the way the global signal stuff is handled: instead of
389         allocating a separate mutex/condvar pair for it, allocate a normal handle.
390         This way, it can reuse the alertable waiting code, allowing 
391         WaitForMultipleObject to work without polling.
392
393 2009-01-09  Miguel de Icaza  <miguel@novell.com>
394
395         Incorporate a few patches from Paolo, slightly modified:        
396
397         * handles.c (_wapi_handle_check_share): On non-Linux systems, do
398         not even compile in the code that scans for /proc/fd, and go
399         directly to the fallback function.
400
401 2009-01-09  Paolo Molaro (lupus@ximian.com)
402
403         * handles.c: Do not include some header files in platforms that
404         lack it.
405
406 2009-01-09  Miguel de Icaza  <miguel@novell.com>
407
408         * messages.c: Eliminate a warning.
409         
410 2009-01-09  Paolo Molaro (lupus@ximian.com)
411
412         * error.c: On some platforms that do not define these variables,
413         do not use them.
414
415         * security.c, io-private.h: Only include some headers if they
416         exist on the system
417
418         * sockets.c, sockets.h: do not import on this header files that
419         are only consumed internally in sockets.c.
420
421 2009-01-09  Zoltan Varga  <vargaz@gmail.com>
422
423         * threads.c (_wapi_thread_apc_pending): Check for thread->wait_handle ==
424         INTERRUPTION_REQUESTED_HANDLE too.
425         (wapi_interrupt_thread): Rework the comments, the thread is no longer
426         required to call QueueUserAPC to make the wait functions return.
427
428         * threads.c handles.c threads-internal.h: Implement alertable waits without
429         polling.
430
431 2009-01-08  Geoff Norton  <gnorton@novell.com>
432
433         * processes.c: Fix the osx version check to properly detect 10.5 v 10.4
434
435 2009-01-08  Christian Prochnow  <cproch@seculogix.de>
436
437         * types.h: added WapiULargeInteger.
438
439         * uglify.h: added ULARGE_INTEGER, PULARGE_INTEGER.
440
441         * io.h: added WapiDriveType, added method declarations
442         for GetDiskFreeSpaceEx and GetDriveType
443
444         * io.c: added GetDiskFreeSpaceEx() to query disk size
445         and free space via statvfs or statfs system call.
446         added GetDriveType to query drive type via /etc/mtab or /etc/mnttab.
447
448 2009-01-07  Geoff Norton  <gnorton@novell.com>
449
450         * processes.c: Properly implement support for Process.Modules on OSX.
451         Fixes OSX on nunit 2.4
452
453 2009-01-07 Rodrigo Kumpera  <rkumpera@novell.com>
454
455         * io.c (GetCurrentDirectory): Avoid calling g_get_current_dir straight
456         away as it doesn't handle ENAMETOOLONG correctly. As a bonus we avoid
457         allocating memory in the common path.
458
459 2009-01-07  Geoff Norton  <gnorton@novell.com>
460
461         * processes.c: Only use open -W on OSX 10.5+.  Patch from
462         Miguel
463
464 2008-12-19  Bill Holmes  <billholmes54@gmail.com>
465
466         * processes.c (get_module_name) : adjust size for unicode characters.
467
468         Code is contributed under MIT/X11 license.
469
470 2008-11-21  Zoltan Varga  <vargaz@gmail.com>
471
472         * atomic.h: Applied patch from Mihai Chelaru <kefren@ngnetworks.ro>. Add
473         netbsd support.
474
475 2008-11-18  Mark Probst  <mark.probst@gmail.com>
476
477         * atomic.h: InterlockedExchangePointer and
478         InterlockedCompareExchangePointer for PPC64.
479
480         Code submitted by andreas.faerber@web.de at
481         https://bugzilla.novell.com/show_bug.cgi?id=324134 under the
482         X11/MIT license.
483
484 2008-11-13  Bill Holmes  <billholmes54@gmail.com>
485
486         * wait.h : Adding method declaration for WaitForInputIdle.
487
488         * wait.c : Adding implementation for WaitForInputIdle.
489
490         Code is contributed under MIT/X11 license.
491
492 Fri Oct 17 15:23:00 CEST 2008 Paolo Molaro <lupus@ximian.com>
493
494         * processes.c: patch from Geoff Norton (gnorton@novell.com) to
495         strdup the open program on OSX (bug #431811).
496
497 2008-10-10 Gonzalo Paniagua Javier <gonzalo@novell.com>
498
499         * versioninfo.c: remove the use of g_strdown.
500
501 2008-09-25  Dick Porter  <dick@ximian.com>
502
503         * wait.c: Make sure we keep references to handles we're waiting
504         for.  Fixes bug 424851.
505
506 2008-07-29  Dick Porter  <dick@ximian.com>
507
508         * processes.c (get_module_name): Make a last-ditch effort to
509         figure out the process name.  Fixes bug 413723, patch by Casey
510         Marshall <casey.s.marshall@gmail.com>
511
512 2008-07-28  Dick Porter  <dick@ximian.com>
513
514         * handles.c (_wapi_handle_count_signalled_handles): Remove an
515         unmatched _wapi_handle_ref().  Fixes bug 410743.
516
517 2008-07-15  Rodrigo Kumpera  <rkumpera@novell.com>
518
519         * versioninfo.c (map_pe_file): Fix memory leak.
520
521 2008-07-01  Zoltan Varga  <vargaz@gmail.com>
522
523         * process-private.h (_WAPI_PROCESS_UNHANDLED_PID_MASK): Fix the amd64 build.
524
525 2008-06-27  Dick Porter  <dick@ximian.com>
526
527         * processes.c: Implement a form of process pseudo-handle to allow
528         non-mono processes to be manipulated.  Fixes bug 313231.
529
530         * wait.c: Check for process pseudo-handles and fail if an attempt
531         is made to wait on one.
532
533 2008-06-19  Dick Porter  <dick@ximian.com>
534
535         * sockets.c: Implement WSASend() and WSAReceive().
536
537 2008-06-02  Dick Porter  <dick@ximian.com>
538
539         * wapi.h: 
540         * Makefile.am: 
541         * messages.h: 
542         * messages.c: Implement FormatMessage, fixes bug 321827.
543
544 2008-05-29  Dick Porter  <dick@ximian.com>
545
546         * sockets.c (socket_close): Clear any saved errors
547         (_wapi_connect): Don't save EWOULDBLOCK errors here, as that
548         breaks async connects.  (Bug 377589 test case broken by the
549         previous fix to bug 356552)
550
551 2008-05-25  Zoltan Varga  <vargaz@gmail.com>
552
553         * thread-private.h (struct _WapiHandle_thread): Remove 'owner_pid' field. Reorder
554         fields so this struct (which is the biggest of the handle structs) takes less
555         space.
556
557         * threads.c (QueueUserAPC): Make this function signal safe by adding some
558         restrictions on its usage.
559
560 2008-05-14  Zoltan Varga  <vargaz@gmail.com>
561
562         * mono-mutex.h: Get rid of the #ifdef __cplusplus defines, use G_BEGIN_DECLS
563         /G_END_DECLS.
564
565 2008-05-07  Dick Porter  <dick@ximian.com>
566
567         * io.c (FindNextFile): Handle symlinks correctly.  Fixes bug
568         385765.
569
570 2008-04-25  Zoltan Varga  <vargaz@gmail.com>
571
572         * handles.c (_wapi_handle_check_share): Fix a crash introduced by the lazy
573         creation of wapi handle slots.
574
575 2008-04-24  Zoltan Varga  <vargaz@gmail.com>
576
577         * handles.c (shared_init): Align _wapi_fd_reserve to a multiple of 
578         _WAPI_HANDLE_INITIAL_COUNT to avoid a problem when allocating handles.
579
580 2008-04-23  Zoltan Varga  <vargaz@gmail.com>
581
582         * handles.c: Initialize the handle array entries on demand to save memory.
583
584         * wapi-private.h (_WAPI_HANDLE_INITIAL_COUNT): Decrease this to 256 to save
585         memory.
586
587         * handles-private.h (_WAPI_PRIVATE_MAX_SLOTS): Increase this to 1024*16 to
588         compensate for the decrease in _WAPI_HANDLE_INITIAL_COUNT.
589         
590         * threads.c: Use #ifdef instead of #if for checking for valgrind/memcheck.h.
591
592 2008-04-22  Dick Porter  <dick@ximian.com>
593
594         * wapi_glob.c (globextend): Comment out the code using ARG_MAX, as
595         that is broken on the latest opensuse.
596
597 2008-04-21  Dick Porter  <dick@ximian.com>
598
599         * io.c (DeleteFile): Disable for now the bug fix for 323389, it's
600         breaking too much other stuff.
601
602 2008-04-20  Geoff Norton  <gnorton@novell.com>
603
604         * processes.c: Fix the _NSGetEnviron define to prevent an impropoer
605         pointer dereference.
606
607 2008-04-18  Miguel de Icaza  <miguel@novell.com>
608
609         * Applied patch from Dick Porter from bug #380649
610
611 2008-04-17  Dick Porter  <dick@ximian.com>
612
613         * io.c (DeleteFile): Check file shares before deleting a file.
614         Fixes bug 323389.
615
616 2008-04-17  Dick Porter  <dick@ximian.com>
617
618         * io.c (DeleteFile): Return ERROR_ACCESS_DENIED if the file is
619         readonly.  Fixes bug 378229.
620
621 2008-04-11  Geoff Norton  <gnorton@novell.com>
622
623         * processes.c: The global extern environ doesn't exist on Mac.  We
624         need to call NSGetEnviron instead.
625
626 2008-04-08  Dick Porter  <dick@ximian.com>
627
628         * processes.c (CreateProcess): Improve the managed binary support,
629         so it works when the executable is passed in as the appname.
630         Fixes bug 377815.
631
632 2008-04-04  Dick Porter  <dick@ximian.com>
633
634         * io.c (MoveFile): Check file shares before moving a file.  Fixes
635         bug 377049.
636
637 2008-04-04  Dick Porter  <dick@ximian.com>
638
639         * error.c (errno_to_WSA): handle ENODEV.  Fixes the reopened part
640         of bug 324035.
641
642 2008-04-04  Dick Porter  <dick@ximian.com>
643
644         * processes.c (GetModuleInformation): 
645         * versioninfo.h: 
646         * versioninfo.c: 64bit fixes
647
648 2008-04-03  Dick Porter  <dick@ximian.com>
649
650         * io-portability.c (_wapi_basename, _wapi_dirname): Only turn \
651         into / when MONO_IOMAP is in effect.  Fixes bug 346123.
652
653 2008-04-03  Dick Porter  <dick@ximian.com>
654
655         * timefuncs.c (GetTickCount): Use mono_msec_ticks(), see bug
656         347476.
657
658 2008-04-01  Dick Porter  <dick@ximian.com>
659
660         * versioninfo.c (get_string_block): Refine the fix for bug 354856
661         (r93661) so that it also fixes the new part of bug 374600.
662
663 2008-03-28  Dick Porter  <dick@ximian.com>
664
665         * processes.c (GetExitCodeProcess): Check if a process has exited
666         and recorded it's exit code, before seeing if the process is
667         signalled.  Fixes bug 325463.
668
669 2008-03-27  Dick Porter  <dick@ximian.com>
670
671         * processes.c (match_procname_to_modulename): Check the whole
672         process name first, in case it is recorded as an absolute path.
673         Fixes bug 360348.
674
675 2008-03-27  Dick Porter  <dick@ximian.com>
676
677         * processes.c (ShellExecuteEx): Grotty kludge to work around
678         unpleasant feature in g_shell_parse_argv() where it treats '#'
679         embedded in a filename as a comment marker, and throws away the
680         rest of the line.  When we're directly opening URLs quote the
681         filename, to avoid this.  Fixes bug 371567.
682
683 2008-03-25  Dick Porter  <dick@ximian.com>
684
685         * wapi-private.h (_WAPI_HANDLE_VERSION): Increment file layout
686         version
687
688         * threads.c: Make thread handles private to the process that owns
689         them.
690
691 2008-03-22  Kornél Pál  <kornelpal@gmail.com>
692
693         * io-layer.h: Windows: Rename GetProcessId to __GetProcessId for targets not
694         supporting it. This fixes MSVC build with new Windows SDKs that declare
695         GetProcessId unconditionally.
696
697 2008-03-20  Kornél Pál  <kornelpal@gmail.com>
698
699         * io-layer.h: Removed Windows version macros.
700
701 Thu Mar 13 16:24:53 CET 2008 Paolo Molaro <lupus@ximian.com>
702
703         * processes.c: properly check for executable files (fixes bug #368829).
704
705 2008-02-05  Dick Porter  <dick@ximian.com>
706
707         * versioninfo.c (VerLanguageName): Implement VerLanguageName.
708
709 2008-01-31  Bill Holmes  <billholmes54@gmail.com>
710         * processes.c (match_procname_to_modulename) : Added to check if the last 
711           part of module name is equal to the process name.
712
713         * processes.c (EnumProcessModules) : Changed the first entry in the returned 
714           modules array (the process module) to be populated from the entry found
715           in /proc/<PID>/maps.
716
717         * processes.c (get_module_name & GetModuleInformation) : In the case where 
718           the module passed in is NULL, search the /proc/<PID>/maps for a name that
719           matches the process name to populate the return information.
720
721         Fixes #357062
722
723 2008-01-29  Zoltan Varga  <vargaz@gmail.com>
724
725         * security.c (RevertToSelf): Make this return TRUE if impersonating is not
726         supported.
727
728         * sockets.c (_wapi_connect): Add a workaround to a solaris x86 problem where
729         getsockopt (SO_ERROR) doesn't return an error code after connect () fails. Fixes
730         #356552.
731
732 2008-01-23  Dick Porter  <dick@ximian.com>
733
734         * versioninfo.c (get_string_block): When stepping over the
735         StringTable block, do not read an extra block at the end.  Fixes
736         the new part of bug 354856.
737
738 2008-01-19  Dick Porter  <dick@ximian.com>
739
740         * versioninfo.c (get_stringtable_block): Cope when the StringTable
741         block is first in the resources data, and we just need to step
742         over it.  Fixes bug 354856.
743
744 2008-01-16  Dick Porter  <dick@ximian.com>
745
746         * threads.c (_wapi_thread_set_termination_details): Move the
747         thread abandonment to outside the shared handle lock.  Fixes bug
748         349680.
749
750 2008-01-16  Dick Porter  <dick@ximian.com>
751
752         * versioninfo.c (VerQueryValue): Include trailing null in returned
753         string length, for MS compatibility.
754
755 2008-01-09  Dick Porter  <dick@ximian.com>
756
757         * versioninfo.c (get_ptr_from_rva, scan_resource_dir): Make it
758         work on big-endian systems.
759         (scan_resource_dir): Copy the resource directory entry and
760         byteswap if necessary so it works big-endian.  This fixes bug
761         345972 for real this time.
762         (VerQueryValue): String values set the length to the number of
763         unicode chars, but the data length reported was already correct so
764         don't halve it again.  Fixes the previous fix for bug 345972.
765         (GetFileVersionInfo): On big-endian systems, scan the resource
766         data and turn all unicode strings into UTF-16BE.  FileVersionInfo
767         now works big-endian.
768
769 2008-01-04  Dick Porter  <dick@ximian.com>
770
771         * versioninfo.c (VerQueryValue): Returned buffer length counts
772         chars not bytes for string data.  Fixes bug 345972 again.
773         (get_enclosing_section_header): Make sure values read are treated
774         as LE.  Fixes crash on ppc reported in bug 345972.
775
776 2007-12-17  Mark Probst  <mark.probst@gmail.com>
777
778         * threads.c: Guard against a race condition involving
779         thread_hash_key that can occur during shutdown.
780
781 2007-12-08  Zoltan Varga  <vargaz@gmail.com>
782
783         * processes.c: Include sys/mkdev.h if exists. Fixes solaris x86 build.
784
785 2007-12-06  Dick Porter  <dick@ximian.com>
786
787         * versioninfo.c: Resource language values must be compared in a
788         'case'-insensitive manner.  Fixes bug 345972.
789
790 2007-12-05  Dick Porter  <dick@ximian.com>
791
792         * io.c (CreateFile): Create files with mode 0666 (&~umask) by
793         default.  Fixes bugs 325299 and 337040.
794
795 2007-11-22  Dick Porter  <dick@ximian.com>
796
797         * critical-sections.h (EnterCriticalSection): Reinstate the
798         asserts in the devel branch, so any problems aren't obscured.
799
800 2007-11-22  Dick Porter  <dick@ximian.com>
801
802         * versioninfo.c (find_pe_file_resources): Make it work on 64bit
803         systems.  Fixes bug 343353.
804
805 2007-11-21  Dick Porter  <dick@ximian.com>
806
807         * processes.c (load_modules): Rewrite based on the libgc
808         /proc/<pid>/maps parsing to avoid using glib functions only
809         available since 2004.
810         (load_modules): Check for duplicates before adding a module to the
811         list.
812
813 2007-11-15  Dick Porter  <dick@ximian.com>
814
815         * processes.c (load_modules): Don't bother if we don't have
816         g_strsplit_set() and g_strv_length().  Allows building against old
817         glib versions.
818         (EnumProcessModules): Don't miss the first module returned by
819         load_modules().
820
821 2007-11-15  Dick Porter  <dick@ximian.com>
822
823         * processes.c: Implement process module support by reading from
824         /proc if it's available.
825
826         * versioninfo.h: 
827         * versioninfo.c: New functions to implement PE file version info
828         support.
829
830 2007-11-08  Dick Porter  <dick@ximian.com>
831
832         * critical-sections.h (EnterCriticalSection): Disable the critical
833         section asserts for the release branch
834
835 2007-11-05  Kornél Pál  <kornelpal@gmail.com>
836
837         * io-layer.h: Added includes for run-time GetProcessId API detection for
838         Windows.
839
840 2007-10-26  Dick Porter  <dick@ximian.com>
841
842         * shared.c (_wapi_shm_file_open): Set the umask when opening
843         shared files, so restrictive defaults don't prevent subsequent
844         processes re-opening them.
845
846 2007-10-18  Zoltan Varga  <vargaz@gmail.com>
847
848         * atomic.h (InterlockedCompareExchange): Fix the ia64 version so it works for
849         negative values too. Hopefully fixes #332700.
850
851 2007-09-26  Dick Porter  <dick@ximian.com>
852
853         * io-portability.c (_wapi_io_scandir): Only update the error
854         status of glob() when performing a secondary glob() if the first
855         returned an error.  Fixes bug 325107.
856
857 2007-09-12  Marek Habersack  <mhabersack@novell.com>
858
859         * io-portability.c: options_init moved to
860         utils/mono-io-portability.c
861         Do not initialize portability helpers here, it's done in
862         mono_runtime_init.
863         find_file and find_in_dir moved to utils/mono-io-portability.c
864
865 2007-09-09  Robert Jordan  <robertj@gmx.net>
866
867         * sockets.c (_wapi_setsockopt): Add support for FreeBSD multicast
868         sockets. Fixes #81891.
869         Code is contributed under MIT/X11 license.
870
871 2007-09-03  Atsushi Enomoto  <atsushi@ximian.com>
872
873         * processes.h, processes.c : ok, they are simple string.
874
875 2007-09-03  Atsushi Enomoto  <atsushi@ximian.com>
876
877         * processes.h : sigh, I really hate fixing them on windows :(
878
879 2007-09-03  Atsushi Enomoto  <atsushi@ximian.com>
880
881         * processes.c : fix build again.
882
883 2007-09-03  Atsushi Enomoto  <atsushi@ximian.com>
884
885         * processes.h : removed extra parameters from CreateProcessWithLogonW.
886
887 2007-09-03  Atsushi Enomoto  <atsushi@ximian.com>
888
889         * processes.c, processes.h: added CreateProcessWithLogonW(). For now
890           it just calls CreateProcess().
891         * io-layer.h : CreateProcessWithLogonW() requires WINVER 0x0500
892           on Windows.
893
894 2007-08-23  Robert Jordan  <robertj@gmx.net>
895
896         * processes.[c|h]: Implement Get|SetPriorityClass ().
897         Code is contributed under MIT/X11 license.
898
899 Tue Aug 21 20:08:09 CEST 2007 Paolo Molaro <lupus@ximian.com>
900
901         * io.c: made convert_arg_to_utf8() and write_file() static.
902         Worked around gcc's incorrect warning.
903
904 2007-08-20  William Holmes  <billholmes54@gmail.com>
905
906         *io.c: Added implementation for ReplaceFile.
907         *io.h: Added deceleration for ReplaceFile method.
908
909         Code is contributed under MIT/X11 license.
910
911 2007-08-20  Wade Berrier  <wberrier@novell.com>
912
913         * processes.c: include sys/resource.h for rusage to fix 
914         mac 10.3 build
915
916 Mon Aug 20 12:36:42 CEST 2007 Paolo Molaro <lupus@ximian.com>
917
918         * processes.c: implemented query for user/system times using
919         getrusage ().
920
921 2007-08-10  Dick Porter  <dick@ximian.com>
922
923         * sockets.c (_wapi_getsockopt, _wapi_setsockopt): Check the option
924         level as well as the name when mangling some of the values.  Fixes
925         bug 82000.
926
927 2007-08-02  Dick Porter  <dick@ximian.com>
928
929         * sockets.c: Changes in error handling, and move the SO_REUSEADDR
930         setting from metadata/socket-io.c.
931
932 2007-08-01  Dick Porter  <dick@ximian.com>
933
934         * io-portability.c (_wapi_io_scandir): Special-case patterns
935         ending in '.*' so that files with no extension are also matched.
936         Fixes bug 82212.
937
938         * wapi_glob.h: 
939         * wapi_glob.c: Reinstate WAPI_GLOB_APPEND, and add
940         WAPI_GLOB_UNIQUE to avoid matching the same entry twice when
941         appending.
942
943 2007-07-26  Dick Porter  <dick@ximian.com>
944
945         * handles-private.h: 
946         * thread-private.h: 
947         * handles.h: 
948         * critical-sections.c: 
949         * handles.c: 
950         * critical-section-private.h:
951         * error.h: 
952         * threads.c: 
953         * error.c: Clean up TLS and pthreads structures.  Finishes off bug
954         78739.
955
956         * collection.c (collection_thread): Exit the collection thread if
957         the io-layer has been cleaned up.
958
959         * mono-mutex.h (mono_mutexattr_destroy): Add this define too
960
961 Mon Jul 23 10:40:35 CEST 2007 Paolo Molaro <lupus@ximian.com>
962
963         * timefuncs.c: make TickCount measure from boot time if it's
964         available.
965
966 2007-07-19  Juraj Skripsky  <js@hotfeet.ch>
967
968         * io.c (MoveFile): Fix a leak. 
969
970 Fri Jul 13 12:46:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
971
972         * handles-private.h, handles.c, thread-private.h, threads.c,
973         uglify.h, wait.c: temporarily revert the alertable wait changes
974         (r79386) until the deadlock issues are fixed.
975
976 2007-06-22  Dick Porter  <dick@ximian.com>
977
978         * shared.c: The non-shared mutexes weren't being initialised properly
979         on macos.  Fixes bug 81929.
980
981 2007-06-13  Randolph Chung  <tausq@debian.org>
982
983         * atomic.h: Enable for all hppa targets.
984         * Makefile.am: rename hppa_atomic.s to hppa_atomic.S so the preprocessor
985         can handle the file.
986         * hppa_atomic.s: Renamed to ...
987         * hppa_atomic.S: ... and updated to work on both HPUX and Linux.
988
989 2007-06-13  Dick Porter  <dick@ximian.com>
990
991         * handles.c (timedwait_signal_wait_cond): Alertable waits on
992         private handles are now interrupted by signalling the same
993         condition that would end the wait if the handle became signalled,
994         rather than polling.  (Shared handles still have to poll.)
995
996         * threads.c (_wapi_thread_queue_apc): Interrupt the thread if it's
997         waiting on a handle
998
999         * handles-private.h (_wapi_handle_current_thread_set_waiting_on):
1000         Helper functions to inform the APC queuing functions when threads
1001         are waiting for handles, and to interrupt the wait.
1002
1003         * wait.c (WaitForMultipleObjectsEx): Need to tell the handle
1004         waiting functions if any of the handles in question are shared
1005
1006 2007-06-06  Miguel de Icaza  <miguel@novell.com>
1007
1008         * processes.c (is_managed_binary): Fix for OSX.
1009
1010 2007-06-06  Wade Berrier  <wberrier@novell.com>
1011
1012         * atomic.h (InterlockedExchangePointer): cast to pointer to to silence
1013         compiler warnings (autobuild fails the build on this type of warning)
1014
1015 2007-05-21  Dick Porter  <dick@ximian.com>
1016
1017         * io-portability.c (_wapi_g_dir_open): Don't propagate any errors
1018         from the second call to g_dir_open, preserve the original error if
1019         the second call still fails but clear the error if it succeeds.
1020
1021 2007-05-10  Dick Porter  <dick@ximian.com>
1022
1023         * sockets.c (_wapi_recvfrom): Refine the fix to bug 75705 so EINTR
1024         isn't returned if the remote end shuts down cleanly.  Fixes zmd
1025         and the second example in bug 75705.
1026
1027 2007-04-26  Dick Porter  <dick@ximian.com>
1028
1029         * shared.c (_wapi_shm_semaphores_init): Need to check
1030         MONO_DISABLE_SHM in this entry point, as it's called before
1031         _wapi_shm_attach().  Fixes bug 81436.
1032
1033 2007-04-24  Dick Porter  <dick@ximian.com>
1034
1035         * sockets.c (_wapi_recvfrom, socket_close): Force recvfrom() to
1036         error if the socket is closed while the receive is blocking.
1037         Fixes bug 75705.
1038
1039 2007-04-13  Dick Porter  <dick@ximian.com>
1040
1041         * shared.h:
1042         * shared.c: Complete the reimplementation of disabling of shared
1043         memory, by not allocating sysv semaphores when shm disabling has
1044         been requested (either at compile time or run time.)
1045
1046         * processes.c (CreateProcess): Don't synchronize locking across
1047         processes when forking, when shared memory has been disabled.
1048
1049 2007-04-06  Andreas Faerber  <andreas.faerber@web.de>
1050
1051         * wapi_glob.h:
1052         * wapi_glob.c: remove reference to sys/cdefs.h, use glib instead.
1053         Fixes: 81326
1054
1055 2007-04-05  Dick Porter  <dick@ximian.com>
1056
1057         * io.c:
1058         * io-portability.c (_wapi_io_scandir): Moved from io.c, and
1059         changed to use a cut-down version of glob(3) that has been
1060         extended to match with case-insensitivity if needed.
1061
1062         * wapi_glob.h:
1063         * wapi_glob.c: Cut down implementation of glob(3), based on
1064         OpenBSD.
1065
1066 2007-03-22  Dick Porter  <dick@ximian.com>
1067
1068         * sockets.c (_wapi_connect): Do additional checks when connect(2)
1069         fails, because some systems don't let it be restarted.  Patch
1070         based on one submitted by Robert S Wojciechowski <robertw@ssgx.com>,
1071         fixes bug 81010.
1072
1073 2007-03-09  Jonathan Chambers  <joncham@gmail.com>
1074
1075         * io-layer.h:  Remove UNICODE and _UNICODE defines as 
1076         these are done by configure.in now.
1077         
1078         Code is contributed under MIT/X11 license.
1079         
1080 Thu Mar 8 19:42:17 CET 2007 Paolo Molaro <lupus@ximian.com>
1081
1082         * shared.c: partial support for MONO_DISABLE_SHM env var.
1083
1084 2007-03-05  Wade Berrier  <wberrier@novell.com>
1085
1086         * atomic.h: atomic fixes from Michael Matz for for s390 
1087         and s390x ( bnc #237611 and bxc #80892 )
1088
1089 2007-03-05  Miguel de Icaza  <miguel@novell.com>
1090
1091         * io.c (CreateFile): Use FILE_ATTRIBUTE_TEMPORARY to mean 0600
1092         permissions.  For 80688
1093
1094         (MoveFile): Use errno_copy here, just to avoid a potential
1095         errno-changing code in the future from g_free. 
1096         
1097         Also, ignore EXDEV errors as they are handled immediately after
1098         (avoid printing out an error). 
1099
1100         Fixes: 80655
1101
1102 Mon Feb 12 15:50:24 CET 2007 Paolo Molaro <lupus@ximian.com>
1103
1104         * shared.c: exit if semaphores can't be created (bug #80616).
1105
1106 2007-02-01  Geoff Norton  <gnorton@customerdna.com>
1107
1108         * collection.c: NetBSD doesn't define PTHREAD_STACK_MIN.
1109
1110 2007-01-26  Dick Porter  <dick@ximian.com>
1111
1112         * socket-private.h: 
1113         * sockets.c (_wapi_getsockopt): Windows seems to not reset
1114         SO_ERROR values when they're read, contrary to the documentation.
1115         Fixes the new issues raised in bug 79878 (example in C showing
1116         winsock behaviour attached to that bug.)
1117
1118 2007-01-15 Mark Mason <mason@broadcom.com
1119
1120         * atomic.h: add locking primitives for MIPS.
1121         
1122 2007-01-11  Dick Porter  <dick@ximian.com>
1123
1124         * sockets.c (_wapi_connect): Don't do the SO_BROADCAST setting
1125         here, do it in managed code instead.
1126         (_wapi_getsockopt): SO_RCVTIMEO and SO_SNDTIMEO use struct
1127         timeval, which has a microsecond field, not milliseconds.
1128         (_wapi_setsockopt): ditto.
1129         (_wapi_setsockopt): Halve the SO_SNDBUF and SO_RCVBUF values on
1130         Linux, as the kernel doubles whatever we set.
1131         (_wapi_socket): Save socket domain, type and protocol so it can be
1132         duplicated later.
1133         (socket_disconnect): Implement socket disconnect (closing the
1134         socket, but keeping the file descriptor.)
1135         (wapi_disconnectex): A basic implementation of DisconnectEx().
1136         (wapi_transmitfile): A very basic implementation of
1137         TransmitFile().
1138         (WSAIoctl): Implement the SIO_GET_EXTENSION_FUNCTION_POINTER
1139         ioctl.
1140
1141         * socket-private.h (struct _WapiHandle_socket): Record socket
1142         domain, type and protocol info so it can be duplicated later.
1143
1144         * sockets.h (WSAID_DISCONNECTEX,WSAID_TRANSMITFILE): Structures
1145         and defines needed to look up the DisconnectEx() and
1146         TransmitFile() functions by GUID.
1147
1148         * error.c (errno_to_WSA): Change ETIMEDOUT mapping to
1149         WSAETIMEDOUT; add EDESTADDRREQ.
1150
1151         * io-layer.h: Need mswsock.h on windows now.
1152
1153 2007-01-04  Miguel de Icaza  <miguel@novell.com>
1154
1155         * io-portability.c (find_file): Fix a coverity warning (scanning
1156         being unassigned).   
1157
1158 2006-12-31  Miguel de Icaza  <miguel@novell.com>
1159
1160         * io-portability.c (find_file): Do not abort if an empty filename
1161         has been passed.  This fixes the case where MONO_IOMAP=all would
1162         assert if Directory.Exists ("") was called.
1163
1164 Mon Dec 18 14:54:37 CET 2006 Paolo Molaro <lupus@ximian.com>
1165
1166         * processes.c: moved a free on the error path.
1167
1168 Thu Dec 14 21:42:39 CET 2006 Paolo Molaro <lupus@ximian.com>
1169
1170         * processes.c: fixed a few memory leaks when executing
1171         processes.
1172
1173 Mon Nov 27 13:12:17 GMT 2006 Paolo Molaro <lupus@ximian.com>
1174
1175         * atomic.h: fix arm compare and exchange (bug #78500).
1176
1177 2006-11-23  Dick Porter  <dick@ximian.com>
1178
1179         * process-private.h (struct _WapiHandle_process): Add 'waited'
1180         parameter
1181
1182         * processes.c (process_wait): Check the 'waited' parameter not the
1183         signalled state when testing if a process has already been waited
1184         for, as the child process itself may set signalled when exiting.
1185         Fixes bug 79885.
1186
1187         * wapi-private.h (_WAPI_HANDLE_VERSION): Bump shared data version
1188
1189         * shared.c: Now the shared data version has been incremented we
1190         can set the counter semaphore initial value correctly
1191
1192 2006-11-22  Dick Porter  <dick@ximian.com>
1193
1194         * processes.c (process_wait): Cope when the background process
1195         reaper gets the process we were waiting for.  Special case for
1196         waiting for our own process to exit.  Fixes bug 77736.
1197
1198 2006-11-17  Dick Porter  <dick@ximian.com>
1199
1200         * processes.c: Fix const correctness and typos that caused memory
1201         corruption. 
1202         
1203 2006-11-17  Miguel de Icaza  <miguel@novell.com>
1204
1205         * processes.c (ShellExecuteEx): Check error after CreateProcess,
1206         thanks to Dick for pointing this out. 
1207
1208 2006-11-16  Miguel de Icaza  <miguel@novell.com>
1209
1210         * processes.c (ShellExecuteEx): If we fail to create a process in
1211         ShellExecute, then try to use the xdg-open command, and if that
1212         fails, try to use the gnome-open command, 
1213
1214         Refactor the code so that we do not have to duplicate all this
1215         code, but instead use a ucs2-aware version of the code to do
1216         concatenations.
1217
1218 2006-11-13  Dick Porter  <dick@ximian.com>
1219
1220         * io.c (_wapi_stat_to_file_attributes): If the file is a symlink
1221         add the FILE_ATTRIBUTE_REPARSE_POINT flag.  This is an attempt to
1222         follow the specs for the windows symlink support, but will
1223         probably have to be reworked when I have test data from a vista
1224         machine.  Fixes bug 79887.
1225
1226 2006-11-11  Miguel de Icaza  <miguel@novell.com>
1227
1228         * handles.c (CloseHandle): Cope here with the new value
1229         INVALID_HANDLE_VALUE set on handles.  
1230
1231         * processes.c (CreateProcess): Initialize the value of hThread to
1232         be INVALID_HANDLE_VALUE on failure, not to be NULL.  Improvement
1233         for #75733
1234
1235 2006-11-09  Dick Porter  <dick@ximian.com>
1236
1237         * sockets.c (_wapi_select): Do some sanity checking on the
1238         fd_sets, to avoid file descriptors > FD_SETSIZE.
1239         (_wapi_FD_CLR, _wapi_FD_ISSET, _wapi_FD_SET): Avoid file
1240         descriptors > FD_SETSIZE.
1241
1242 2006-10-27  Dick Porter  <dick@ximian.com>
1243
1244         * io.c (GetFileAttributes): Force symlinks to directories to be
1245         returned as a regular file.  Fixes bug 79733.
1246
1247 2006-10-18  Miguel de Icaza  <miguel@novell.com>
1248
1249         * io-portability.c (find_in_dir): First string dup, then closedir.
1250
1251 2006-10-12  Dick Porter  <dick@ximian.com>
1252
1253         * processes.c (_wapi_process_reap): Unref a process handle if we
1254         reaped it, found by Zoltan.  Fixes bug 79286.
1255         (process_wait): Don't wait again if we've already waited for a
1256         process.
1257
1258 2006-10-11  Sergey Tikhonov <tsv@solvo.ru>
1259
1260         * atomic.h: Fix atomic decrement.
1261
1262         * mini/cpu-alpha.md: Use native long shift insts
1263
1264         * mono/mono/mini/tramp-alpha.c: Implemented
1265         mono_arch_patch_delegate_trampoline method
1266
1267         * Started work on using global registers
1268         
1269         * Use byte/word memory load/store insts if cpu supports it
1270         
1271         * Code clean up
1272
1273         
1274 2006-10-09  Zoltan Varga  <vargaz@gmail.com>
1275
1276         * handles.c (timedwait_signal_poll_cond): Add an alertable parameter, and if it
1277         is FALSE, avoid busy waiting.
1278
1279         * wait.c: Add an alertable parameter to the wait routines.
1280
1281 2006-10-06  Miguel de Icaza  <miguel@novell.com>
1282
1283         * io-portability.c (find_file): Rename from
1284         MONO_IO_PORTABILITY_HELP to MONO_IOMAP.
1285
1286 2006-10-03  Dick Porter  <dick@ximian.com>
1287
1288         * io-portability.h: 
1289         * io-portability.c: Optional portability helpers and wrapped
1290         system calls to try to cope with windows filenames in
1291         applications.
1292
1293         * io.c: Use the wrapped system calls
1294
1295 2006-09-01  Zoltan Varga  <vargaz@gmail.com>
1296
1297         * critical-sections.h critical-sections.c: Make Enter/LeaveCriticalSection a macro
1298         since they are perf critical.
1299
1300         * atomic.h: Applied patch from Jakub Boqusz <qboosh@pld-linux.org>.
1301         Add atomic ops implementation for alpha.
1302
1303 2006-08-11  Dick Porter  <dick@ximian.com>
1304
1305         * processes.c (_wapi_process_reap): Avoid a deadlock by setting
1306         process termination details in an outer loop, not the
1307         _wapi_search_handle() one.
1308
1309 2006-08-10  Dick Porter  <dick@ximian.com>
1310
1311         * threads.c (_wapi_thread_queue_apc)
1312         (_wapi_thread_dispatch_apc_queue): Use a process-local mutex here
1313         instead of the cross process semaphore.  We already check that
1314         access to the APC queue is within the owning process so there's no
1315         need to protect from other processes.  Avoids a global deadlock
1316         when a thread is aborted while it holds the handle semaphore
1317         locked.
1318         (_wapi_thread_apc_pending): Hide an annoying message which can
1319         happen if a thread handle has been blown away at process shutdown
1320         while it is in an alertable wait.
1321
1322         Both problems seen while shutting down monodevelop.
1323
1324 2006-07-25  Dick Porter  <dick@ximian.com>
1325
1326         * shared.c (_wapi_shm_file): Remove '/' characters from the uname
1327         results.  Fixes bug 78917.
1328
1329 2006-07-20  Dick Porter  <dick@ximian.com>
1330
1331         * threads.c (_wapi_thread_set_termination_details): Improve the
1332         test for already-disposed thread handles, and hold the lock around
1333         the mutex abandoning.
1334
1335 2006-07-17  Dick Porter  <dick@ximian.com>
1336
1337         * processes.c (CreateProcess): Don't change directory unless a new
1338         one has been specified.  Fixes bug 78751.
1339
1340 2006-07-06  Dick Porter  <dick@ximian.com>
1341
1342         * io.c (_wapi_stat_to_file_attributes): Do a better job at
1343         figuring out the file attributes
1344         (_wapi_set_last_path_error_from_errno): New helper function to
1345         turn errno into w32 error codes that handles the differences
1346         between file and directory errors
1347         (file_setendoffile): Try turning off the extra write used to
1348         extend files, because we probably don't need it on any modern
1349         platform.  If it is needed though, we also need to lseek the file
1350         position back again
1351         (CreateFile): Treat character-special devices as a console handle,
1352         because they can't be seeked
1353         (CopyFile): If fail_if_exists is set, then the destination needs
1354         to be opened with O_EXCL
1355         (CopyFile): If fail_if_exists is not set and the destination
1356         already exists, then we should set the ERROR_ALREADY_EXISTS error
1357         even though we return success
1358         (stdhandle_create): STD_INPUT_HANDLES cannot be written to
1359         (GetStdHandle): Rework without using mono_once, so console handles
1360         can be properly closed and reopened.
1361         (mono_io_scandir): Only override errno with EACCES when the
1362         directory actually exists
1363         (FindFirstFile): Set ERROR_FILE_NOT_FOUND when no files are
1364         returned
1365         (FindClose): Cope with NULL handles
1366         (CreateDirectory): When the target already exists, just return an
1367         error.  It's the caller's job to figure out what to do.
1368         (SetCurrentDirectory): Cope with a NULL path
1369         (RemoveDirectory, GetFileAttributes, GetFileAttributesEx,
1370         SetFileAttributes, FindFirstFile, DeleteFile, MoveFile, CopyFile,
1371         CreateFile): Set path error correctly
1372
1373         * handles.c (CloseHandle): Kludge to try and cope with passing a
1374         NULL handle
1375
1376         * error.h: Add NO_ERROR as an alternative to ERROR_SUCCESS
1377
1378         * uglify.h: Added some more typedefs
1379
1380 2006-07-05  Dick Porter  <dick@ximian.com>
1381
1382         * io.c (GetFileAttributes, GetFileAttributesEx): Cope with
1383         dangling symlinks.  Fixes bug 78664.
1384
1385 2006-06-23  Dick Porter  <dick@ximian.com>
1386
1387         * handles.c (handle_cleanup): 
1388         * threads.c: Clean up threads properly when we're forcibly
1389         removing the handle entries from the shared file in
1390         handle_cleanup().  Fixes bug 78241, for real this time.
1391
1392 2006-06-15 Neale Ferguson <neale@sinenomine.net>
1393
1394         * atomic.h: More tinkering with InterlockedExchange/InterlockedCompareExchange
1395         for s390/s390x.
1396
1397 2006-06-14 Neale Ferguson <neale@sinenomine.net>
1398
1399         * atomic.h: Fix atomic exchange pointer operations for s390x - these
1400         were broken as they used 32-bit instructions rather than their 64-bit
1401         versions.
1402
1403 2006-06-14  Dick Porter  <dick@ximian.com>
1404
1405         * processes.c: Don't run the atexit handlers when bailing out
1406         of a fork/exec.
1407
1408 2006-06-14  Dick Porter  <dick@ximian.com>
1409
1410         * wait.c: Fix stupid typo shown up by gcc 4.1.1, = not ==
1411
1412         * handles-private.h: 
1413         * shared.c: 
1414         * io.c: 
1415         * processes.c: 
1416         * mono-spinlock.h: 
1417         * handles.c: 
1418         * collection.c: Fix a bunch of signed/unsigned warnings from gcc
1419         4.1.1
1420
1421 2006-06-09 Neale Ferguson <neale@sinenomine.net>
1422
1423         * atomic.h: Fix atomic operations for s390x (not really broken 
1424         but changed to use full 64-bit opcodes).
1425
1426 2006-05-24  Dick Porter  <dick@ximian.com>
1427
1428         * processes.c (process_set_current): Don't take an extra reference
1429         if we have to create our own process handle.  Fixes bug 78241
1430         again.
1431
1432         * threads.c (_wapi_thread_signal_self): Renamed from
1433         _wapi_thread_abandon_mutexes, also sets the thread state to
1434         signalled and drops a reference.  Called by the runtime when the
1435         main thread cleans itself up.
1436
1437         * handles.c (handle_cleanup): As a last resort, unref every shared
1438         handle as the process is now exiting.
1439
1440 2006-05-16  Dick Porter  <dick@ximian.com>
1441
1442         * processes.c (process_set_termination_details): Unref the handle
1443         when we've stored the exit details.  Fixes the rest of 78241.
1444
1445 2006-05-12  Dick Porter  <dick@ximian.com>
1446
1447         * threads.c: Implement pseudo handles, making GetCurrentThread()
1448         match MS behaviour.  Notice when attached threads exit, and unref
1449         the handle.  Fix usage of GetCurrentThread() in other places.
1450
1451         * handles.c (DuplicateHandle): Implement a basic form of
1452         DuplicateHandle().
1453
1454         * wait.c: Fix usage of GetCurrentThread() throughout, and cope
1455         with pseudo handles.
1456
1457 2006-04-26  Miguel de Icaza  <miguel@novell.com>
1458
1459         * io.c (file_close): Oops, do not use DeleteFile which expects
1460         unicode, instead use unlink directly
1461
1462         Add support for the new FileOptions bits on .NET 2.0.
1463
1464         It might be good if Dick reviews these changes.
1465         
1466         * io.c (file_close): If DeleteOnClose is set, then delete the file
1467         before freeing it.
1468         (CreateFile): Do not support encryption per user. 
1469         
1470         If posix_fadvise exists, pass hints on sequential scan and random
1471         access.   Did not figure out what WRITE_THROUGH maps to.
1472
1473 2006-04-26  Dick Porter  <dick@ximian.com>
1474
1475         * sockets.c (WSAIoctl): Check the output buffer is valid before
1476         writing to it.
1477
1478         * handles.c (_wapi_search_handle): Set shared pointer if we find a
1479         shared handle that has been already opened.
1480
1481 2006-04-21  Dick Porter  <dick@ximian.com>
1482
1483         * threads.c (GetCurrentThread): Reference the handle if we return
1484         an already-known thread.
1485
1486 2006-04-07  Dick Porter  <dick@ximian.com>
1487
1488         * processes.c: Fix build for older glib.
1489
1490 2006-04-06  Dick Porter  <dick@ximian.com>
1491         
1492         * processes.c (CreateProcess): Add a reference to the child
1493         process' handle, so it won't be destroyed if this process closes
1494         its copy of the handle.  Fixes bug 77393.
1495         
1496         * processes.c (process_set_current): Fall through to creating a
1497         new one if the handle lookup fails.
1498
1499         * processes.c (_wapi_process_signal_self):
1500         * handles.c (handle_cleanup): The process is exiting, so set the
1501         handle state for this process to signalled.  This should let other
1502         non-related processes wait for this handle.
1503         
1504         * handles.c (_wapi_search_handle): Don't search shared handles in
1505         all cases.
1506
1507         * collection.c (collection_thread): No need to do a collection
1508         scan straight away, do the waiting first.
1509
1510 2006-04-06  Dick Porter  <dick@ximian.com>
1511
1512         * shared.c: Fix parameters in semctl () call.
1513
1514 2006-03-28  Zoltan Varga  <vargaz@gmail.com>
1515
1516         * atomic.h atomic.c: Applied patch from David S. Miller 
1517         <davem@davemloft.net>: Reimplement Interlocked* primitives on sparc 
1518         using CAS/CASx when __GNUC__, else we will fall back to the generic 
1519         pthread version.
1520
1521 2006-03-27  Dick Porter  <dick@ximian.com>
1522
1523         * shared.c (_wapi_shm_file_open): Break out of a loop if the
1524         shared file is smaller than expected.  (We loop a few times in
1525         case another process is in the middle of creating the file.)
1526
1527 2006-03-22  Dick Porter  <dick@ximian.com>
1528
1529         * handles.c:
1530         * wapi-private.h:
1531         * shared.h:
1532         * shared.c: Delete the semaphores and shared files when the last
1533         process has finished with them
1534
1535 2006-03-15  Dick Porter  <dick@ximian.com>
1536
1537         * events.c: 
1538         * io.c: 
1539         * mutexes.c: 
1540         * processes.c: 
1541         * semaphores.c: 
1542         * sockets.c: 
1543         * threads.c: Explicitly initialise the handle ops struct
1544
1545 2006-03-14  Dick Porter  <dick@ximian.com>
1546
1547         * handles-private.h: 
1548         * wapi-private.h: 
1549         * wait.c: 
1550         * handles.c: Add a 'prewait' stage to the handle waiting, to give
1551         waiting threads a chance to check for bogus states before
1552         blocking.
1553
1554         * mutexes.c (namedmutex_prewait): Use the prewait stage to check
1555         for named mutexes that have been abandoned in a locked state (eg
1556         if a process exited abnormally while owning the mutex) and
1557         override it if needed.
1558
1559 2006-03-08 Gonzalo Paniagua Javier <gonzalo@ximian.com>
1560
1561         * wait.c: speed up WaitFor* when the timeout is 0.
1562
1563 2006-03-03  Dick Porter  <dick@ximian.com>
1564
1565         * processes.c (ShellExecuteEx): Cope when some of the parameters
1566         are NULL.
1567
1568 2006-02-27  Dick Porter  <dick@ximian.com>
1569
1570         * mutexes.c: 
1571         * mono-mutex.c: 
1572         * threads.c: Comparing pthread_t with == is not portable, so use
1573         pthread_equal().
1574
1575 Thu Feb 23 18:47:20 GMT 2006 Paolo Molaro <lupus@ximian.com>
1576
1577         * *.h, *.h: patch from Dick to make Linuxthreads systems work again.
1578
1579 2006-02-22  Dick Porter  <dick@ximian.com>
1580
1581         * thread-private.h: 
1582         * threads.c: There's no need to use the timed-thread support code
1583         any more, as we aren't using the timed join.  This greatly
1584         simplifies thread setup, and fixes a memory leak (bug 77521).
1585
1586         Don't bother to store thread IDs in a hash table, use TLS instead.
1587         The one case that needs to look up the handle of a different
1588         thread (OpenThread()) can do the extra work itself.  Fixes bug
1589         77536.
1590
1591         * handles.c (_wapi_search_handle): Add a reference when returning
1592         a private handle (shared handles are already reffed.)
1593         
1594 2006-02-17  Dick Porter  <dick@ximian.com>
1595
1596         * handles-private.h: 
1597         * handles.c: Check handle values passed to array lookups.  Fixes
1598         bug 77572.
1599
1600 2006-02-09  Dick Porter  <dick@ximian.com>
1601
1602         * threads.c: Cope with the problems caused by attaching already
1603         existing threads - they don't get the infrastructure to clean up
1604         after themselves, especially the ID to handle hash.  This fixes
1605         bug 77468.
1606
1607 2006-02-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
1608
1609         * shared.c: use MONO_SHARED_HOSTNAME as a substitute for gethostname()
1610         when creating the shared files in the .wapi directory. Fixes bug #77371.
1611
1612 2006-02-02  Martin Baulig  <martin@ximian.com>
1613
1614         * threads.c: Removed the `WITH_INCLUDED_LIBGC' section; it has
1615         never been used so far. 
1616
1617         * timed-thread.h (TimedThread): Removed the `stack_ptr' field; it
1618         has only been used by the removed code.
1619
1620 2006-01-03  Neale Ferguson <neale@sinenomine.net>
1621
1622         * atomic.h: Correct s390x definitions and eliminate compiler warnings.
1623
1624 2006-01-03  Sebastien Pouliot  <sebastien@ximian.com>
1625
1626         * io.c: Patch _wapi_stat_to_file_attributes against bug #76966, where
1627         sockets could be considered as directory.
1628
1629 2005-12-23  Dick Porter  <dick@ximian.com>
1630
1631
1632         * semaphores.h: 
1633         * semaphores.c: Implement OpenSemaphore
1634
1635         * mutexes.c: 
1636         * mutexes.h: Implement OpenMutex
1637
1638         * wapi-private.h: 
1639         * handles.c: 
1640         * events.c: 
1641         * events.h: 
1642         * event-private.h: Implement named events.  Implement OpenEvent.
1643
1644 2005-12-15  Dick Porter  <dick@ximian.com>
1645
1646         * processes.c (CreateProcess): The pipe-based cross-process
1647         exclusion technique was trying to write NULL buffers when appname
1648         was NULL (eg when coming from ShellExecuteEx,) which usually
1649         succeeded even though EFAULT was returned - but sometimes it
1650         failed.  This meant that the child process could block forever on
1651         the pipe read.  Replace it with the simpler shared handle
1652         semaphore protection used everywhere else.  This showed up with
1653         the test case in bug 76684.
1654
1655 Tue Dec 13 11:41:49 GMT 2005 Paolo Molaro <lupus@ximian.com>
1656
1657         * shared.c: fallback to private mmap when shared mmap doesn't work
1658         (like on jffs).
1659
1660 2005-12-06  Dick Porter  <dick@ximian.com>
1661
1662         * wapi-private.h: 
1663         * handles.c: 
1664         * semaphore-private.h: 
1665         * semaphores.c: Implement named semaphores
1666
1667 2005-11-24  Dick Porter  <dick@ximian.com>
1668
1669         * processes.c (GetProcessId): Implement GetProcessId()
1670
1671 2005-11-17  Dick Porter  <dick@ximian.com>
1672
1673         * processes.h: 
1674         * processes.c: Implement ShellExecuteEx as a wrapper around
1675         CreateProcess.
1676
1677 2005-11-11  Dick Porter  <dick@ximian.com>
1678
1679         * threads.c: Give mutex abandoning its own exported function, so
1680         it can be called when the runtime is cleaning up.
1681
1682         * handles.c (_wapi_search_handle_namespace): Do a handle
1683         collection befre starting to check namespace strings, so that any
1684         stale cruft gets removed.
1685
1686 2005-11-11  Dick Porter  <dick@ximian.com>
1687
1688         * threads.c: Move thread handles back into the shared space.
1689
1690         * handles.c (_wapi_handle_unref): Add support for shared handles
1691         with close() handlers
1692
1693 2005-11-04  Dick Porter  <dick@ximian.com>
1694
1695         * sockets.c (ioctlsocket): Use select instead of if to avoid a
1696         type promotion problem on 64bit freebsd.  Based on patch by Lou
1697         Kamenov <kamenovl@gmail.com>, fixes bug 76447.
1698
1699 2005-11-04  Dick Porter  <dick@ximian.com>
1700
1701         * io.c (file_write): Only do the file locking if
1702         MONO_STRICT_IO_EMULATION is set.
1703
1704 2005-10-21  Dick Porter  <dick@ximian.com>
1705
1706         * processes.c: 
1707         * handles.c (_wapi_lookup_handle): Cope when the shared part of a
1708         handle has been deleted.
1709         (_wapi_handle_unref): And when the deleted shared part is pointed
1710         to as a handle is deleted
1711
1712 2005-10-20  Dick Porter  <dick@ximian.com>
1713
1714         * processes.c (process_set_current): If the expected process
1715         handle slot doesn't contain the correct pid, create a new handle.
1716
1717         * handles.c (_wapi_search_handle): When the search doesn't find
1718         anything, return failure instead of the last handle we looked at.
1719         (_wapi_handle_ref, _wapi_handle_unref): Don't try to ref or unref
1720         unused handles (makes tracking refcounting bugs easier.)
1721
1722 2005-10-19  Dick Porter  <dick@ximian.com>
1723
1724         * handles.c:
1725         * handles-private.h:
1726         * wapi-private.h: 
1727         * processes.c: 
1728         * mutexes.c:
1729         * collection.c (_wapi_handle_collect): Remove the shared handle
1730         indirection layer, and use locking instead.  Delete other
1731         complexity that is no longer needed.  Refcount shared handles and
1732         delete them when needed, but keep the timestamps so that orphaned
1733         handles will be cleaned up eventually.
1734
1735         * shared.c (_wapi_shm_file): Add processor, OS and struct size
1736         info to the shared file names, to cope with dual-boot and 32/64bit
1737         size issues.  Fixes bug 75839.
1738
1739         * wait.c (WaitForMultipleObjectsEx): No need to distinguish
1740         between shared handles and private, as the wait functions cope
1741         with both together now.
1742
1743 2005-10-11 Gonzalo Paniagua Javier <gonzalo@ximian.com>
1744
1745         * io.c: removed NO_SIGPIPE macro.
1746         * sockets.c: no need for MSG_NOSIGNAL or ignoring SIGPIPE.
1747
1748 2005-10-11  Dick Porter  <dick@ximian.com>
1749
1750         * sockets.c (_wapi_getsockopt): Translate SO_ERROR results into
1751         w32 error codes.
1752
1753         * error.c (errno_to_WSA): Don't return a bogus error if someone
1754         asks to translate errno 0.
1755
1756 2005-10-11  Dick Porter  <dick@ximian.com>
1757
1758         * handles.c: Fix several race conditions
1759
1760 2005-10-11 Miguel de Icaza <miguel@novell.com>
1761
1762         * io.c: no need to block SIGPIPE anymore, as it is ignored.
1763
1764 2005-10-05  Dick Porter  <dick@ximian.com>
1765
1766         * threads.c (_wapi_thread_own_mutex, _wapi_thread_disown_mutex):
1767         Keep a reference to mutexes owned by threads, so they won't be
1768         destroyed prematurely.  Fixes dotmsnclient crash.
1769
1770 2005-09-26  Sebastien Pouliot  <sebastien@ximian.com>
1771
1772         * io.c: Apply patch from #76192 (Can't write files past 2gb on AMD64 
1773         (x86_64)) for Brion on IRC (Dick approved it).
1774
1775 2005-09-23  Dick Porter  <dick@ximian.com>
1776
1777         * processes.c: Don't wait for processes that have already been
1778         signalled; also fix typo.
1779
1780         * handles.c: Improve locking inside new handle and handle
1781         searching functions.
1782
1783 2005-09-20  Dick Porter  <dick@ximian.com>
1784
1785         * collection.c: 
1786         * processes.c: Periodically waitpid for known process IDs.  Fixes
1787         bug 74870.
1788
1789 2005-09-15 Gonzalo Paniagua Javier <gonzalo@ximian.com>
1790
1791         * io.c:
1792         (CreateFile): if the file is a named pipe, treat the handle as a pipe,
1793         not as a file. Fixes bug #76075.
1794
1795 2005-08-27  Zoltan Varga  <vargaz@gmail.com>
1796
1797         * atomic.h: Add support for intel icc.
1798
1799 2005-08-25  Zoltan Varga  <vargaz@gmail.com>
1800
1801         * io-layer.h: Include winbase.h not WinBase.h.
1802
1803 2005-08-19  Dick Porter  <dick@ximian.com>
1804
1805         * threads.c, threads.h, thread-private.h: Use a gsize to store the
1806         thread ID, so it can hold a 64 bit value if needed.
1807
1808 2005-07-26 Gonzalo Paniagua Javier <gonzalo@ximian.com>
1809
1810         * error.c: map ENOENT to WSAECONNREFUSED. It might happen when
1811         connecting to unix sockets. Closes bug #75632.
1812
1813 2005-07-05  Dick Porter  <dick@ximian.com>
1814
1815         * io.c: Make sure SIGPIPE is ignored when calling write(2).
1816         Prevents the runtime exiting when writing to a closed pipe,
1817         fixing bug 75468.
1818
1819 2005-06-30  Dick Porter  <dick@ximian.com>
1820
1821         * shared.c (_wapi_shm_semaphores_init): Add some helpful error
1822         messages when semget () fails due to lack of resources.
1823
1824 2005-06-21  Dick Porter  <dick@ximian.com>
1825
1826         * mutex-private.h:
1827         * thread-private.h:
1828         * mutexes.c: 
1829         * threads.c: Keep a list of owned mutexes in each thread handle,
1830         so that it is easier to abandon them when the thread exits.
1831         Removes a bottleneck when multiple threads are finishing in
1832         parallel.
1833
1834 2005-06-12 Gonzalo Paniagua Javier <gonzalo@ximian.com>
1835
1836         * io.c: (GetLogicalDrives) when a bogus line is read, don't leak memory.
1837         When the buffer has not enough space, close the file before returning.
1838
1839 2005-06-09  Duncan Mak  <duncan@novell.com>
1840
1841         * *.h: Added G_BEGIN_DECLS and G_END_DECLS where appropriate to
1842         all public headers. Fixes #74919.
1843
1844 2005-05-30  Zoltan Varga  <vargaz@freemail.hu>
1845
1846         * atomic.h: Add IA64 atomic ops.
1847
1848 2005-05-26 Gonzalo Paniagua Javier <gonzalo@ximian.com>
1849
1850         * processes.c: make ExitCode be valid even if the user didn't call
1851         WaitForExit() and is just polling on HasExited.
1852
1853 2005-05-17  Dick Porter  <dick@ximian.com>
1854
1855         * io.c (file_getfilesize): Clear the error value, so that files
1856         with sizes with the low bits 0xFFFFFFFF can be distinguished from
1857         a genuine error.
1858
1859 2005-05-11 Gonzalo Paniagua Javier <gonzalo@ximian.com>
1860
1861         * shared.c: forgot to ignore a warning.
1862
1863 2005-05-10 Gonzalo Paniagua Javier <gonzalo@ximian.com>
1864
1865         * shared.c: don't display warnings after reboots.
1866
1867 2005-05-07 Gonzalo Paniagua Javier <gonzalo@ximian.com>
1868
1869         * sockets.c: on windows, getsockopt/setsockopt for send/receive timeout
1870         use an integer in milliseconds. We were using a struct timeval.
1871
1872 2005-05-06  Dick Porter  <dick@ximian.com>
1873
1874         * handles-private.h: 
1875         * mutexes.c: 
1876         * wapi-private.h: 
1877         * shared.h:
1878         * shared.c: 
1879         * wait.c: 
1880         * handles.c: 
1881         * collection.h: Use SysV semaphores for managing access to the
1882         shared memory - in return for the ludicrous api we get
1883         synchronisation primitives that can be cleaned up by the kernel
1884         even when a process quits unexpectedly.  This removes the
1885         timestamp issues.
1886
1887 2005-05-05  Lluis Sanchez Gual  <lluis@novell.com>
1888
1889         * handles.c: Always use polling in the waits, since
1890         mono_cond_timedwait can't be interruped by the thread abort signal.
1891
1892 2005-04-30 Gonzalo Paniagua Javier <gonzalo@ximian.com>
1893
1894         * events.c: calling Set on AutoResetEvent several times has the same
1895         effect as calling it only once if no thread is waiting for it.
1896
1897 2005-04-29  Dick Porter  <dick@ximian.com>
1898
1899         * processes.c (EnumProcesses): Use a GArray instead of a GPtrArray
1900         now it's storing pids not handles, also fixes memory leak caused
1901         by unclear glib documentation.
1902
1903         * sockets.c (WSACleanup): Remove unused variable
1904
1905 2005-04-29  Dick Porter  <dick@ximian.com>
1906
1907         * handles.c (_wapi_handle_check_share_by_pid): For systems that
1908         don't have file descriptor info in /proc check that the original
1909         opener of a file is still there, if a share violation would
1910         otherwise happen.
1911
1912 2005-04-28 Gonzalo Paniagua Javier <gonzalo@ximian.com>
1913
1914         * handles.c:
1915         * handles-private.h: added _wapi_handle_forecch that loops through all
1916         the handles and call a callback function when a handle of the given
1917         type is found.
1918
1919         * sockets.c: no need to keep open sockets in an array, as we have them 
1920         in the handles structure.
1921
1922         Fixes bug #74755.
1923
1924 2005-04-28  Dick Porter  <dick@ximian.com>
1925
1926         * processes.c: Cope with handles that are only around for as long
1927         as the search is running.  If we're searching for process handles,
1928         check to see if the process is still running and signal it if not.
1929
1930         * handles.c (_wapi_search_handle): Search in the shared space as
1931         well.  Fixed bug 74752.
1932
1933         * mutexes.c:
1934         * handles.c (_wapi_handle_new_from_offset):
1935         _wapi_handle_new_for_existing_ns () was doing exactly the same as
1936         this, so deleted it.
1937
1938 2005-04-26  Dick Porter  <dick@ximian.com>
1939
1940         * handles.c: Fix stupid thinko where if a new shared handle is
1941         created but a collection was needed to free some space, it
1942         returned an error anyway.  Should fix the messages shown in bug
1943         74659.
1944
1945 2005-04-25  Dick Porter  <dick@ximian.com>
1946
1947         * handles.c (_wapi_handle_check_share): Only consider mono
1948         processes when looking to see if a file is still being held open,
1949         while checking share permissions.
1950
1951 2005-04-25  Dick Porter  <dick@ximian.com>
1952
1953         * sockets.c: 
1954         * io.c: 
1955         * wapi-private.h (struct _WapiHandleOps): 
1956         * handles.c (_wapi_handle_unref): When destroying handles, save
1957         the handle data and call the close function only after the array
1958         slot has been cleared.  This prevents race conditions with file
1959         descriptors, fixing bug 74713.
1960
1961         * mutexes.c: Delete the handle close functions, they didn't do
1962         anything anyway
1963
1964         * error.c (_wapi_get_win32_file_error): Add a mapping for EINTR so
1965         the "Unknown error" g_warning doesn't get displayed.
1966
1967 2005-04-25  Dick Porter  <dick@ximian.com>
1968
1969         * wapi-private.h: 
1970         * threads.c: Make thread handles process-private for now to take
1971         some of the space pressure off the shared memory, while I work on
1972         a real fix.
1973
1974 2005-04-21  Dick Porter  <dick@ximian.com>
1975
1976         * handles.c (_wapi_handle_check_share): Make sure there is a "fd"
1977         dir in /proc before blowing away handle info.  Fixes bug 74649.
1978
1979 2005-04-21  Dick Porter  <dick@ximian.com>
1980
1981         * wait.c (WaitForMultipleObjectsEx): Implement special waits
1982
1983         * handles.c (_wapi_handle_wait_signal_poll_share): Don't return a
1984         timeout, just wait briefly for the private signals and let the
1985         waiting thread test again.  This prevents us missing shared
1986         signals.
1987
1988 2005-04-21  Dick Porter  <dick@ximian.com>
1989
1990         * collection.h (_WAPI_HANDLE_COLLECTION_EXPIRED_INTERVAL): Reduce
1991         the time before a slot is considered too old and deleted.  This is
1992         a workaround while I come up with a proper fix.
1993
1994 2005-04-21  Dick Porter  <dick@ximian.com>
1995
1996         * mutexes.c: 
1997         * processes.c: 
1998         * threads.c: 
1999         * handles.c (_wapi_handle_new): Turn assertions into errors.
2000
2001         * collection.c (_wapi_handle_collect): Use symbols not magic
2002         numbers for timeout values
2003
2004 2005-04-19  Dick Porter  <dick@ximian.com>
2005
2006         * mutexes.c: 
2007         * wait.c: 
2008         * handles.c (_wapi_handle_count_signalled_handles)
2009         * handles-private.h (_wapi_handle_shared_lock_handle): Use new
2010         shared handle locks in critical sections.
2011
2012         * handles.c (_wapi_handle_new_for_existing_ns): Reuse old handles
2013         if there is already one there.
2014         
2015         * handles.c (_wapi_handle_ref): It was possible for a process to
2016         exit before getting around to updating shared handle timestamps,
2017         so do it here too.
2018
2019 Tue Apr 19 16:25:47 CEST 2005 Paolo Molaro <lupus@ximian.com>
2020
2021         * threads.c: fix lookup of the thread id in the has table:
2022         always use the id value, not the pointer to the id.
2023
2024 2005-04-18 Gonzalo Paniagua Javier <gonzalo@ximian.com>
2025
2026         * handles.c: fix handle returned in _wapi_handle_search_handle. Dick
2027         pointed it out.
2028
2029 2005-04-16 Gonzalo Paniagua Javier <gonzalo@ximian.com>
2030
2031         * io-layer/sockets.c: FIONBIO with a TRUE argument means we want
2032         non-blocking IO, not the other way around.
2033
2034 2005-04-16 Gonzalo Paniagua Javier <gonzalo@ximian.com>
2035
2036         * handles.c:
2037         * io.c:
2038         * handles-private.h: GetFileType wasn't checking if we have memory
2039         allocated for the handle before dereferencing it. Fixes a FileStream
2040         nunit test.
2041
2042 2005-04-16 Gonzalo Paniagua Javier <gonzalo@ximian.com>
2043
2044         * handles.c:
2045         * processes.c:
2046         * handles-private.h: we were calling g_renew to expand the handle array,
2047         but that might move the memory and we might have pthread conditions or
2048         mutexes in the original memory area that are being used. Now instead of
2049         expanding an existing array, we just create new ones and keep a list of
2050         them. Access to _wapi_private_handles had to be modified accordingly.
2051
2052 2005-04-15  Dick Porter  <dick@ximian.com>
2053
2054         * collection.c: FreeBSD needs more than PTHREAD_STACK_MIN
2055
2056 2005-04-14  Raja R Harinath  <rharinath@novell.com>
2057
2058         * wapi-private.h: Remove reference to 'daemon-private.h'.
2059
2060 Wed Apr 13 13:12:33 EDT 2005 Paolo Molaro <lupus@ximian.com>
2061
2062         * atomic.h: applied patch from mass@akuma.org (David Waite)
2063         to fix InterlockedExchangeAdd.
2064         Fixed a few other functions, including InterlockedCompareExchange()
2065         which was miscompiled by gcc with optimizations enabled.
2066
2067 2005-04-13  Dick Porter  <dick@ximian.com>
2068
2069         * io.c (share_check): 
2070         * handles.c (_wapi_handle_check_share): Refine the file check so
2071         that sharing violations within the same process don't cause
2072         assertion failures.
2073
2074 2005-04-13  Dick Porter  <dick@ximian.com>
2075
2076         * io.c (FindFirstFile): Fix bugs introduced with the merge (bug
2077         74586)
2078
2079 2005-04-12  Dick Porter  <dick@ximian.com>
2080         
2081         The daemon-less io-layer.  Extensive lowlevel changes in
2082         handles.c, requiring some corresponding changes in other files
2083         calling these functions.  Private_foo structures have been
2084         eliminated.
2085
2086         File descriptor handling differences account for most of the
2087         changes in io.c and sockets.c.
2088
2089         Other highlights:
2090         
2091         * mutexes.c: Named mutexes are now a distinct type.
2092         * atomic.h: Fix a PPC uninitialised variable warning.
2093         * wait.c: Check conditions before waiting on a condition variable.
2094         * processes.c: Handle process fork and wait without a daemon
2095         (though this has the limitation of only being able to wait for
2096         child processes.)
2097
2098 2005-04-07 Gonzalo Paniagua Javier <gonzalo@ximian.com>
2099
2100         * io-private.h:
2101         * threads.c:
2102         * threads.h:
2103         * io.c:
2104         * sockets.c:
2105         * sockets.h: removed dead code that deals with async IO.
2106
2107 2005-03-30  Zoltan Varga  <vargaz@freemail.hu>
2108
2109         * atomic.c (InterlockedIncrement): Fix fallback implementation of
2110         InterlockedIncrement and InterlockedDecrement. Fixes #74228.
2111
2112 2005-03-29  Sebastien Pouliot  <sebastien@ximian.com>
2113
2114         * io-layer.h: Add required header files for compiling with VS.NET.
2115
2116 2005-03-17 Miguel de Icaza <miguel@novell.com>
2117
2118         * io.c: don't fail on NFS when there are no more locks available.
2119
2120 2005-03-09  Dick Porter  <dick@ximian.com>
2121
2122         * error.c (_wapi_get_win32_file_error): ENFILE and EMFILE should
2123         map to ERROR_TOO_MANY_OPEN_FILES, not ERROR_NO_MORE_FILES.  Fixes
2124         bug 72671.
2125
2126 2005-03-09  Dick Porter  <dick@ximian.com>
2127
2128         * daemon.c (process_process_fork): Initialise the handle data
2129         before using it in the error case.  This is probably the error
2130         we're working around in the previous change.  Spotted by Taru Jain
2131         <tjain@novell.com> and Hemanth Yamijala <YHemanth@novell.com>.
2132
2133 2005-03-07  Dick Porter  <dick@ximian.com>
2134
2135         * daemon.c: It looks like g_shell_parse_argv() can return
2136         argv[0]=NULL somehow, yet still not give an error.  Make sure we
2137         don't pass NULL to strrchr(), working around a segfault that
2138         showed up on ZLM testing.
2139
2140 2005-03-01 Gonzalo Paniagua Javier <gonzalo@ximian.com>
2141
2142         * sockets.c: translate EINPROGRESS to EWOULDBLOCK in connect. This is
2143         the expected error code showed by the test case in bug #73053.
2144
2145 2005-02-18 Gonzalo Paniagua Javier <gonzalo@ximian.com>
2146
2147         * io.c: another leftover.
2148
2149 Fri Feb 18 17:37:29 CET 2005 Paolo Molaro <lupus@ximian.com>
2150
2151         * io.c: fixed logic in checking errno in rev 40815.
2152
2153 Fri Feb 18 16:00:29 CET 2005 Paolo Molaro <lupus@ximian.com>
2154
2155         * threads.c: we don't depend on the GC checking tls
2156         slots anymore.
2157         * processes.c: remove unused ref to GC headers.
2158
2159 Thu Feb 17 19:57:11 CET 2005 Paolo Molaro <lupus@ximian.com>
2160
2161         * io.c: remove _wapi_thread_cur_apc_pending () checks
2162         when the siscall should return immediatly and handle
2163         the case when a syscall is interrupted without
2164         erroring out, but returning a 0 read/write if possible.
2165         Still the cases of read from file need to be handled.
2166
2167 Tue Feb 8 18:28:11 CET 2005 Paolo Molaro <lupus@ximian.com>
2168
2169         * threads.c: make people test with 1 MB stack per thread.
2170
2171 2005-01-17  Dick Porter  <dick@ximian.com>
2172
2173         * timefuncs.h: Make WapiFileTime endian-aware, as it's often
2174         cast to and from 64bit ints.  Fixes bug 71213.
2175
2176 2005-01-11  Dick Porter  <dick@ximian.com>
2177
2178         * error.c (errno_to_WSA): Add EADDRNOTAVAIL error code
2179         translation.
2180
2181 Mon Jan 10 16:15:19 EST 2005 Neale Ferguson <nealeferguson@earthlink.net>
2182
2183         * atomic.h: Fix functions on s390.
2184
2185 Mon Jan 10 20:30:19 CET 2005 Paolo Molaro <lupus@ximian.com>
2186
2187         * atomic.h: fix some functions on ppc (tests/interlocked.cs).
2188
2189 2005-01-10  Dick Porter  <dick@ximian.com>
2190
2191         * misc.c (_wapi_calc_timeout): Guard against overflow when
2192         calculating timeouts.  This makes waiting with a large
2193         (Int32.MaxValue) timeout not return immediately.
2194
2195 2004-12-23  Ben Maurer  <bmaurer@ximian.com>
2196
2197         * io.c (io_ops): make this `const' so it is shareable (well, only
2198         really shareable if it is statically linked...)
2199
2200 Mon Dec 20 11:58:33 CET 2004 Paolo Molaro <lupus@ximian.com>
2201
2202         * threads.c, threads.h: add accessor to get the pthread_key_t for
2203         a tls id.
2204
2205 2004-12-13 Gonzalo Paniagua Javier <gonzalo@ximian.com>
2206
2207         * io.c: check for the existence of 'dest' and set ERROR_ALREADY_EXISTS
2208         if it exists and is not the same as 'src'.
2209
2210 2004-12-01 Neale Ferguson <Neale.Ferguson@SoftwareAG-usa.com>
2211
2212         * atomic.h : Fix InterlockedCompareExchange for s390/s390x.
2213
2214 2004-12-01 Gonzalo Paniagua Javier <gonzalo@ximian.com>
2215
2216         * processes.c: unquote the cmd path, allow for ' or " when quoting and
2217         pass the quoted program name to the daemon, otherwise the call to
2218         g_shell_unquote in the daemon will break things up.
2219
2220 2004-10-14  Dick Porter  <dick@ximian.com>
2221
2222         * sockets.c (_wapi_accept): Revert the previous change.  We now
2223         set the accepted socket to have the same blocking status as the
2224         listening socket in managed code.  This follows MS behaviour.
2225         
2226 2004-10-14  Dick Porter  <dick@ximian.com>
2227
2228         * sockets.c (_wapi_accept): On Darwin, make sure a newly
2229         accept()ed socket is blocking.  Fixes bug 67355, patch by
2230         grompf@sublimeintervention.com.
2231
2232 2004-10-04 Gonzalo Paniagua Javier <gonzalo@ximian.com>
2233
2234         * system.c: check the number of online processors instead of the
2235         existing ones. Sanitize return value if it's an error.
2236
2237 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
2238
2239         * system.c: Add support for getting the # of cpus.
2240
2241 2004-09-28  Dick Porter  <dick@ximian.com>
2242
2243         * io.c (pipe_close_private): Fix one small typo in the last change
2244         that totally hosed process creation with redirected pipes.
2245
2246 2004-09-24  Dick Porter  <dick@ximian.com>
2247
2248         * wapi-private.h: 
2249         * sockets.c: 
2250         * socket-private.h: 
2251         * io.c: 
2252         * io-private.h: 
2253         * handles-private.h: Cope when a file descriptor is reused while
2254         the handle that thought it owned it is still referenced, instead
2255         of asserting.  Probably fixes bug 66479, though we've been unable
2256         to reproduce it.
2257
2258 2004-09-09  Dick Porter  <dick@ximian.com>
2259
2260         * error.c:
2261         * io.c: Set error codes everywhere.
2262
2263 2004-09-06  Dick Porter  <dick@ximian.com>
2264
2265         * handles.c (_wapi_handle_unref): Reset the private record's type
2266         (CloseHandle): Check for a fd mapping failure, and return FALSE.
2267         (_wapi_handle_process_fork): Fix long-standing bug in checking
2268         handle return values.  Also do the required bookkeeping with the
2269         new process's handles.
2270
2271         * daemon.c: When creating a new process's handles, check whether
2272         the shared space needs to be increased
2273
2274 2004-09-05  Zoltan Varga  <vargaz@freemail.hu>
2275
2276         * shared.c (_wapi_shm_file): Fix leaking of filename.
2277
2278 2004-08-19  Dick Porter  <dick@ximian.com>
2279
2280         * handles.c (_wapi_handle_count_signalled_handles): Fix thinko
2281         introduced with the fd offset stuff: unlock handles properly when
2282         backing off.  Fixes the monologue hang at exit.
2283
2284 2004-08-18  Dick Porter  <dick@ximian.com>
2285
2286         * sockets.c: 
2287         * io.c: Check that new fds fit in the table, return error if not
2288
2289         * daemon.c (_wapi_daemon_main): 
2290         * handles.c (shared_init): Have all processes agree on a size for
2291         the fd table.
2292
2293 2004-08-17  Dick Porter  <dick@ximian.com>
2294
2295         * daemon.c (process_new): 
2296         * handles.c (_wapi_handle_new_internal): Cope when the space
2297         reserved for file descriptors is larger than the shared segment
2298         size.  Fixes the crash reported when running mono under gdb on
2299         macosx.
2300
2301 2004-08-16  Dick Porter  <dick@ximian.com>
2302
2303         * sockets.c:
2304         * io.c:
2305         * handles-private.h (_wapi_handle_fd_offset_to_handle): Improve
2306         error checking with passed-in file descriptors.
2307
2308 2004-08-11  Dick Porter  <dick@ximian.com>
2309
2310         * sockets.c: 
2311         * io.c: Returned handle values are the file descriptor the handle
2312         encapsulates
2313
2314         * handles.c: 
2315         * handles-private.h: 
2316         * daemon.c: Reserve the range of handles that can have the same
2317         values as file descriptors.  These won't be used, but the values
2318         will be used as file, console, pipe or socket handles.  The fd to
2319         handle mapping is done internally and is invisible to users.
2320         Fixes bug 61828.
2321
2322         * wapi-private.h (_WAPI_HANDLE_VERSION): Increment, because we now
2323         reserve a chunk of handle space.
2324
2325 2004-08-04  Neale Ferguson <Neale.Ferguson@SoftwareAG-usa.com>
2326
2327         * atomic.h: add support for 64-bit S/390
2328
2329 2004-07-22  Dick Porter  <dick@ximian.com>
2330
2331         * timed-thread.c: 
2332         * threads.c: Move the destruction of the internal thread data to
2333         after the thread has been joined.  Fixes bug 61418.
2334
2335 2004-07-14  Dick Porter  <dick@ximian.com>
2336
2337         * wait.c (test_and_own): When not waiting for all handles to
2338         become signalled, only own and return the lowest.  All the
2339         documentation suggests that the old way was correct, but
2340         experimentation shows it actually works like this.  Patch by
2341         Sébastien Robitaille
2342         (sebastien.robitaille@croesus.com), fixes bug 61511.
2343
2344 2004-07-09  Ben Maurer  <bmaurer@ximian.com>
2345
2346         * threads.c: register roots for gc
2347
2348 2004-07-08  Dick Porter  <dick@ximian.com>
2349
2350         * io.c (file_seek): If there is a high 32bit offset part, make
2351         sure the low part isn't sign-extended.  Set error codes when
2352         returning failure.  Fixes bug 61131.
2353
2354 2004-07-06  Dick Porter  <dick@ximian.com>
2355
2356         * io.c (file_setfiletime): Check for underflow when converting to
2357         time_t values.  Set error codes when returning failure.  Fixes bug
2358         60970.
2359
2360 2004-07-05  Dick Porter  <dick@ximian.com>
2361
2362         * mutexes.c (mutex_ops_init): Make the named mutex mutex sharable.
2363
2364         * daemon.c (unref_handle): Only destroy a handle if all processes
2365         have released it, not just the current one.  Fixes bug 60887.
2366
2367 2004-06-30  Zoltan Varga  <vargaz@freemail.hu>
2368
2369         * mono-mutex.h atomic.h: Add G_GNUC_UNUSED to static inline functions
2370         to prevent warnings.
2371
2372 2004-06-24  Dick Porter  <dick@ximian.com>
2373
2374         * mutexes.c: Indicate when a named mutex was reused
2375
2376 2004-06-24  Dick Porter  <dick@ximian.com>
2377
2378         * threads.c (SuspendThread): 
2379         * timed-thread.c (_wapi_timed_thread_suspend): Wrap sem_wait in a
2380         while loop.  See bug 58161.
2381
2382 Wed Jun 23 23:29:04 CEST 2004 Paolo Molaro <lupus@ximian.com>
2383
2384         * io.c: don't use sharemode for on-disk file permissions: it's used
2385         for shared access to the open file.
2386
2387 2004-06-22  Dick Porter  <dick@ximian.com>
2388
2389         * events.c (CreateEvent): When creating an auto-reset event that
2390         is initially owned, make sure the set count starts at 1.
2391
2392 2004-06-18  Dick Porter  <dick@ximian.com>
2393
2394         * event-private.h:
2395         * events.c: Auto-reset events need to release one thread for each
2396         time SetEvent() is called.  Fixes bug 41292.
2397
2398         * threads.h:
2399         * mutex-private.h:
2400         * mutexes.c: Scan for mutexes that are still locked by a thread
2401         when it exits.  Fixes the MS demo app linked by bug 41292.
2402
2403         * wait.c (test_and_own): Make sure a handle is signalled before it
2404         is owned.
2405
2406 2004-06-16  Dick Porter  <dick@ximian.com>
2407
2408         * timed-thread.c: Call the thread cleanup exit routine before taking
2409         the join mutex, because this could deadlock if another thread tries
2410         to join in the meantime.  This fixes the hang-at-exit problem seen
2411         on macos.
2412
2413 2004-06-03  Lluis Sanchez Gual  <lluis@ximian.com>
2414
2415         * threads.c: Implemented SleepEx.
2416         * threads.h: Fixed SleepEx signature.
2417
2418 2004-06-03  Miguel de Icaza  <miguel@ximian.com>
2419
2420         * threads.c: When running under valgrind, do not allocate too much
2421         stack, as Valgrind default is 1 meg.
2422
2423 2004-05-27  Dick Porter  <dick@ximian.com>
2424
2425         * io.h:
2426         * io.c: Implemented LockFile() and UnlockFile()
2427
2428 2004-05-21  Dick Porter  <dick@ximian.com>
2429
2430         * io.c (CreateFile): Check for existing share modes when opening
2431         a file.
2432
2433         * handles.c: 
2434         * handles-private.h: 
2435         * daemon-messages.h: 
2436         * daemon.c: Maintain a hash of file share modes, keying on device
2437         and inode (to cope with symlinks.)
2438
2439 2004-05-20  Lluis Sanchez Gual  <lluis@ximian.com>
2440
2441         * daemon-messages.c: Retry if the communication with the daemon is
2442           interrupted by a signal.
2443         * io.c, sockets.c: Check for EINTR in every syscall that can be interrumped. 
2444           Only return an error in this case if there is something in the apc queue
2445           (which means that it is an interruption requested by the "user").
2446         * processes.c: Use WaitForSingleObjectEx. No need to pass "alertable" as
2447           true since the wait is small.
2448         * shared.c: Retry write calls when interrumped by a signal.
2449         * timed-thread.h, timed-thread.c: added _wapi_thread_apc_pending, which
2450           returns TRUE if there are pending asynchronous calls (APC) for the
2451           provided thread. Also added _wapi_thread_dispatch_apc_queue which calls
2452           the enqueued APCs. Defined a new struct ApcInfo that holds information
2453           about an enqueued APC.
2454         * thread-private.h, threads.c: Implemented QueueUserAPC (which does the same
2455           as in win32),_wapi_thread_apc_pending and _wapi_thread_dispatch_apc_queue. 
2456           These last two methods call the corresponding apc methods in 
2457           thread-private using the provided thread handle.
2458         * threads.h: Added QueueUserAPC.
2459         * uglify.h: Added WapiApcProc (needed by QueueUserAPC).
2460         * wait.c, wait.h: Changed WaitForSingleObject to WaitForSingleObjectEx, and
2461           WaitForMultipleObjects to WaitForMultipleObjectsEx. Implemented support
2462           for APCs in those two methods and also in SleepEx.
2463
2464 2004-05-17  Dick Porter  <dick@ximian.com>
2465
2466         * io.c (CopyFile): Speed up.  Fixes bug 57859.
2467
2468 2004-05-13  Dick Porter  <dick@ximian.com>
2469         * mono-mutex.c (mono_mutex_unlock): Return EPERM when the current
2470         thread doesn't own the mutex, rather than assert()ing.
2471
2472 2004-05-11  Dick Porter  <dick@ximian.com>
2473
2474         * shared.c (_wapi_shm_attach): Cope when a previous daemon startup
2475         attempt failed, leaving shared files that look like a daemon is
2476         still starting.
2477
2478 2004-05-10  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2479
2480         * io.c:
2481         (SetFileAttributes): don't the the exec bit if the corresponding read
2482         bit is not set.
2483
2484 2004-05-10  Zoltan Varga  <vargaz@freemail.hu>
2485
2486         * io.c (FindFirstFile): Fix invalid free.
2487
2488 2004-05-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2489
2490         * io.c: translate from GFileError to errno codes and don't free
2491         variables right after calling mono_io_scandir, as we may overwrite
2492         errno value.
2493
2494 2004-05-08  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2495
2496         * io.c: g_dir_open return ENOENT for directories on which we don't have
2497         read/execute permission, while returning EPERM for anything below those.
2498         So, change ENOENT by EPERM if the directory exists.
2499
2500 2004-05-07  Dick Porter  <dick@ximian.com>
2501
2502         * io.c (SetFileAttributes): Don't have failed chmod()s cause a
2503         "file not found" error.  Fixes bug 54032.
2504         
2505 2004-05-07  Dick Porter  <dick@ximian.com>
2506
2507         * io.c (FindFirstFile): Comment out a windows-compatibility check
2508         that breaks when directories have metachars in their names.
2509         Workaround for bug 58116.
2510
2511 2004-05-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2512
2513         * io.c: fixed for FindFirstFile for empty directories. Closes
2514         bug #58147.
2515
2516 2004-05-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2517
2518         * processes.c: set the start time for the current process. Fixes bug
2519         #58109.
2520
2521 2004-05-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2522
2523         * io-private.h: 'namelist' is now a gchar ** in _WapiHandlePrivate_find.
2524         * io.c: implemented scandir using glib functions.
2525
2526 2004-05-04  Dick Porter  <dick@ximian.com>
2527
2528         * daemon.c (read_message): Return FALSE on error so the GSource
2529         callback itself can return FALSE.  Cures the infinite loop poll()
2530         warning on MacosX.
2531         * shared.c: Fix some daemon startup race conditions.
2532
2533 2004-04-29  Miguel de Icaza  <miguel@ximian.com>
2534
2535         * io.c (CopyFile): Use 32k buffers to copy the file instead of 2k,
2536         use the stack, do not use dynamic memory.
2537
2538 2004-04-29  Zoltan Varga  <vargaz@freemail.hu>
2539
2540         * io.c: Add scandir implementation for platforms which do not have
2541         it, like solaris.
2542
2543 2004-04-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2544
2545         * io.[ch]: implemented GetLogicalDriveStrings.
2546
2547 2004-04-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2548
2549         * io.c:
2550         * sockets.c: use the field name from configure when accessing sigval
2551         pointer field. Makes this work on the Mac.
2552
2553 2004-04-28  Bernie Solomon  <bernard@ugsolutions.com>
2554
2555         * atomic.c: (InterlockedExchange) fix typo for
2556         mutex name
2557
2558 2004-04-28  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2559
2560         * io.c:
2561         * sockets.c: added check for sys/aio.h.
2562
2563 2004-04-28  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2564
2565         * error.[ch]: added _wapi_get_win32_file_error...
2566         * io.c: ... which was _wapi_get_win32_error here.
2567         * sockets.c: rename the function calls here too.
2568
2569 2004-04-28  Dick Porter  <dick@ximian.com>
2570
2571         * daemon-messages.c: Avoid a deadlock when a thread is killed while
2572         waiting for the daemon by using a recursive mutex.  Helps bug 56699.
2573
2574 2004-04-28  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2575
2576         * io.c: fixed leak in async_notifier().
2577
2578         * sockets.[ch]: added AIO support for sockets and fixed WSAIoctl
2579         declaration.
2580
2581         * threads.c: removed old comment.
2582
2583 2004-04-26  David Waite  <mass@akuma.org>
2584
2585         * daemon-messages.h:
2586         * daemon-private.h
2587         * error.h:
2588         * io.h:
2589         * processes.h:
2590         * shared.h:
2591         * thread-private.h:
2592         * wapi-private.h: remove comma from end of enumeration declarations
2593         * status.h: cast unsigned int types to int for enum assignment
2594
2595 2004-04-26 David Waite <mass@akuma.org>
2596
2597         * io.c:
2598         * timefuncs.c: declare 64-bit constants as long long types (i.e.
2599         10ULL)
2600
2601 2004-04-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2602
2603         * socket-wrappers.h: _wapi_socket == WSASocket now. Added
2604         WSA_FLAG_OVERLAPPED.
2605
2606         * sockets.c: new unused parameters for _wapi_socket.
2607
2608 2004-04-22  Miguel de Icaza  <miguel@ximian.com>
2609
2610         * timed-thread.c: Replace sem_init with MONO_SEM_INIT to handle
2611         the fact that MacOS X is a piece of junk (sem_init is *defined* in
2612         the libc, but they return `not implemented'). 
2613
2614 2004-04-22  Dick Porter  <dick@ximian.com>
2615
2616         * handles.c: 
2617         * handles-private.h: Reference the handle when it is locked, so
2618         that another thread can't blow it away while we're waiting for it
2619         to become signalled.
2620         
2621         * wait.c: 
2622         * timed-thread.c: 
2623         * threads.c: 
2624         * sockets.c: 
2625         * semaphores.c: 
2626         * mutexes.c: 
2627         * mono-mutex.c: 
2628         * io.c: 
2629         * handles.c: 
2630         * handles-private.h: 
2631         * events.c: 
2632         * error.c: 
2633         * daemon-messages.c: 
2634         * critical-sections.c: 
2635         * atomic.c: Added pthreads cleanup handlers and error asserts
2636
2637         * shared.c: 
2638         * handles.c: Fixed the gcc "variable might be used uninitialised"
2639         warnings.  They can't happen, but gcc doesn't know that
2640         g_assert()s don't return.
2641
2642         Fixed the declaration of _wapi_handle_process_kill() so that it
2643         expects the correct type for the pid.
2644         
2645         * threads.c: Removed the TLS_PTHREAD_MUTEX style locking that
2646         hasn't been used in ages and just made the code more complex.
2647
2648 2004-04-17  Zoltan Varga  <vargaz@freemail.hu>
2649
2650         * processes.c: Include <signal.h> for SIGKILL and SIGILL + fix some
2651         warnings. Fixes #57168.
2652
2653 2004-04-16  Dick Porter  <dick@ximian.com>
2654
2655         * threads.c (Sleep): Using div(3) with a negative (when signed)
2656         numerator causes the quotient to be 0 and the remainder to be the
2657         numerator.  This feeds a small negative value to nanosleep(3),
2658         which will return immediately and cause a busy wait.  Fixes bug
2659         56351.
2660
2661 2004-04-15  Dick Porter  <dick@ximian.com>
2662
2663         * io-private.h:
2664         * io.c: Rewrite FindFirstFile and FindNextFile using scandir(3)
2665         and fnmatch(3) instead of glob(3).  glob() can't cope with being
2666         given filenames containing metachars.  This fixes bug 40557.
2667
2668 2004-04-14  Bernie Solomon  <bernard@ugsolutions.com>
2669
2670         * security.c: #warning is a GCC-ism
2671
2672 2004-04-13  Sebastien Pouliot  <sebastien@ximian.com>
2673
2674         * security.c: Removed GetUserName as glib g_get_user_name does a
2675         better (portability) job. Added ImpersonateLoggedOnUser and
2676         RevertToSelf.
2677
2678 2004-04-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2679
2680         * mono-mutex.h: move pthread_mutex_timedlock declaration to...
2681         * mono-mutex.c: ...here. It was causing a warning that prevented
2682         libgdiplus compilation.
2683
2684 2004-04-04  Miguel de Icaza  <miguel@ximian.com>
2685
2686         * security.c (GetUserName): Make it work on MacOS X
2687
2688 2004-04-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2689
2690         * security.c: use getpwuid_r if available. This one is thread-safe.
2691
2692 2004-04-02  Sebastien Pouliot  <sebastien@ximian.com>
2693
2694         * Makefile.am: Added security.c|h.
2695         * security.c: New file for security related functions. Added function
2696         GetUserName to fix #56144.
2697         * security.h: New. Header file for security.c
2698         * wapi.h: Added include for security.h
2699
2700 2004-03-25  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2701
2702         * daemon-messages.h: added kill structs.
2703
2704         * daemon.c: implemented process_process_kill.
2705         * handles-private.h:  define process_process_kill.
2706         * handles.c: implemented _wapi_handle_process_kill.
2707         * processes.[ch]: implemented TerminateProcess.
2708
2709 2004-03-25  Bernie Solomon  <bernard@ugsolutions.com>
2710
2711         * daemon.c (rem_fd): On solaris you seem to get an
2712         error even after removing the input source so don't
2713         try and rem_fd it twice.
2714
2715 2004-03-25  Lluis Sanchez Gual  <lluis@ximian.com>
2716
2717         * daemon.c: in process_post_mortem, If the child terminated due to the 
2718         receipt of a signal, the exit status must be based on WTERMSIG, since 
2719         WEXITSTATUS returns 0 in this case.
2720
2721 2004-03-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2722
2723         * daemon.c: turned a warning into a DEBUG statement. Now we may hit it.
2724
2725 2004-03-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2726
2727         * daemon.c: only call getdtablesize () once.
2728         * processes.c: wait 500 ms to check if execve failed and throw the same
2729         exception as MS on failure. Fixes bug #32809.
2730
2731 2004-03-17  Bernie Solomon  <bernard@ugsolutions.com>
2732
2733         * io.c (async_notifier): use "union sigval" rather
2734         than sigval_t as Solaris doesn't have sigval_t
2735         (which isn't in IEEE 1003.1 either).
2736
2737 2004-03-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2738
2739         * io.c: added debug stuff and removed a few redundant lines in
2740         file_write.
2741
2742 2004-03-15  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2743
2744         * io-private.h: added new fields for file structure. Declare
2745         _wapi_io_add_callback.
2746
2747         * io.c: added _wapi_get_win32_error, support aio_read/write in
2748         file_read/write. Implemented _wapi_io_add_callback, which is where
2749         BindHandle ends up.
2750         
2751         * io.h: added new fields for WapiOverlapped and typedef for the
2752         callback.
2753
2754         * processes.c: fixed off-by-one bug when handling environment variables 
2755         passed in.
2756
2757         * threads.[ch]: implemented BindIoCompletionCallback.
2758
2759         * uglify.h: added typedef for LPOVERLAPPED_COMPLETION_ROUTINE.
2760
2761 2004-03-14  Zoltan Varga  <vargaz@freemail.hu>
2762
2763         * socket-wrappers.h: Remove extra semicolon.
2764
2765 2004-03-03  Dave Camp  <dave@ximian.com>
2766
2767         * daemon.c: (add_fd), (fd_activity), (_wapi_daemon_main):
2768         Use a new main context.
2769
2770 2004-03-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2771
2772         * io.c:
2773         (GetFileAttributes): set the error depending on errno instead of
2774         setting ERROR_FILE_NOT_FOUND always. See bug #55160.
2775
2776 2004-03-01  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2777
2778         * io.c:
2779         (CopyFile): free the buffer on error.
2780         * sockets.c:
2781         (WSAIoctl): free the buffer on error.
2782
2783 2004-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2784
2785         * error.c: fixed mapping for EPROTONOSUPPORT and ESOCKTNOSUPPORT.
2786
2787         * sockets.[ch]: retry creating the socket for AF_INET, SOCK_RAW
2788         using IP protocol with IP over IP. Implemented WSAIoctl UNIX-style.
2789
2790 2004-01-27  Bernie Solomon  <bernard@ugsolutions.com>
2791
2792         * shared.c (_wapi_shm_file): add hostname
2793         to shared data file names to handle NFS mounted
2794         .wapi directories.
2795
2796 Mon Jan 26 16:15:03 CET 2004 Paolo Molaro <lupus@ximian.com>
2797
2798         * sockets.h: remove obsolete soklen_t typedef.
2799
2800 Fri Jan 23 21:07:02 CET 2004 Paolo Molaro <lupus@ximian.com>
2801
2802         * socket-wrappers.h, sockets.h, sockets.c, Makefile.am: move socket
2803         wrappers to its own non-installed header file.
2804
2805 2004-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2806
2807         * io.c:
2808         (FindFirstFile): unlock the handle if FindNextFile fails.
2809         (FindNextFile): g_free a couple of pointers before retrying.
2810
2811         * wait.c:
2812         (WaitForMultipleObjects): if only one handle provided, use
2813         WaitForSingleObject.
2814
2815 2003-12-22  Bernie Solomon  <bernard@ugsolutions.com>
2816
2817         * handles-private.h: (_wapi_handle_type) check
2818         for segment in range before using it
2819
2820 2003-12-22  Bernie Solomon  <bernard@ugsolutions.com>
2821
2822         * thread-private.h: _wapi_thread_ops is now const
2823         must match .c file.
2824
2825 Mon Dec 22 18:29:03 CET 2003 Paolo Molaro <lupus@ximian.com>
2826
2827         * threads.c, timed-thread.c, timed-thread.h: use mach
2828         semaphores on Darwin (MacOSX) since the posix ones
2829         are mostly broken there (threads are not created suspended
2830         and they can start executing before they are fully initialized
2831         like in tests/thread-static.cs).
2832
2833 Mon Dec 22 17:18:45 CET 2003 Paolo Molaro <lupus@ximian.com>
2834
2835         * atomic.h: ppc fixes.
2836
2837 2003-12-19  Bernie Solomon  <bernard@ugsolutions.com>
2838
2839         * handles.c: remove my bad use of MONO_ZERO_ARRAY_LENGTH
2840         in HDRSIZE 
2841
2842 2003-12-15  Bernie Solomon  <bernard@ugsolutions.com>
2843
2844         * shared.c: (_wapi_shm_open) make scratch file
2845         not have to immediately regrow to avoid remaps
2846         (HPUX can't cope with these).
2847         (_wapi_shm_attach) use actual size of file
2848         to set scratch data_len for the creating process.
2849
2850         * handles.c: (_wapi_handle_new_internal) make
2851         sure mutex & cond var are initialized even for
2852         non process shared ones. 
2853         (_wapi_handle_unref) always call destroy 
2854         routines on mutex & cond var
2855
2856 2003-12-15  Bernie Solomon  <bernard@ugsolutions.com>
2857
2858         * daemon.c: change channel data structure so
2859         input sources are removed from glib event loop
2860         properly. xsp works better on Solaris and 
2861         fixes #51278
2862
2863 2003-12-12  Bernie Solomon  <bernard@ugsolutions.com>
2864
2865         * wapi-private.h: Replace G_GNUC_PRETTY_FUNCTION
2866         definition with file & line number for non-GCC
2867         compiles.
2868
2869 2003-12-08  Bernie Solomon  <bernard@ugsolutions.com>
2870
2871         * Makefile.am: make sure hppa_atomic.s is in distribution
2872
2873 2003-12-01  Dick Porter  <dick@ximian.com>
2874
2875         * wapi-private.h: 
2876         * mutexes.c (CreateMutex): 
2877         * mutex-private.h (struct _WapiHandle_mutex): 
2878         * handles.c: Look up certain handle types by name, in a shared
2879         namespace.  Currently only mutex handles have this implemented.
2880         Fixes bug 51089.
2881
2882         * semaphores.c (CreateSemaphore): 
2883         * events.c (CreateEvent): Fix signature
2884
2885 2003-11-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2886
2887         * io.c: don't call g_free before testing errno as it may modify it.
2888         If the path exists, return an error if it's not a directory. Fixes
2889         bug #50753.
2890
2891 2003-11-20  Dick Porter  <dick@ximian.com>
2892
2893         * io.c: Missed a little-endian UTF16 conversion.  Patch from
2894         Jeroen Zwartepoorte (Jeroen@xs4all.nl), fixes bug 51065.
2895
2896 2003-10-29  Dick Porter  <dick@ximian.com>
2897
2898         * io.c (MoveFile): If the move crosses filesystems, try and fall
2899         back to copy and delete.  Patch from Jörg Rosenkranz
2900         (JoergR@voelcker.com), fixes bug 50298.
2901
2902 2003-10-28  Dick Porter  <dick@ximian.com>
2903
2904         * io.c: Use the new encoding conversion to cope with non-utf8
2905         locales in filenames.
2906
2907         * processes.c: Ditto for process arguments.
2908
2909 Tue Oct 21 12:01:14 CEST 2003 Paolo Molaro <lupus@ximian.com>
2910
2911         * atomic.h: some ppc inline asm fixes (incorrect use of labels, 
2912         incorrect register constraints, incorrect clobber lists).
2913
2914 2003-10-13  Bernie Solomon  <bernard@ugsolutions.com>
2915
2916         * Makefile.am hppa_atomic.s: add HP 64bit
2917         implementation of atomic ops
2918
2919 2003-10-13  Zoltan Varga  <vargaz@freemail.hu>
2920
2921         * threads.c (CreateThread): Wrap pthread_attr_setstacksize call in
2922         a conditional for platforms that don't have it.
2923
2924 2003-10-09  Bernie Solomon  <bernard@ugsolutions.com>
2925
2926         * threads.c: (CreateThread) use stacksize argument
2927         if non-zero - change default for 64 bits to 4Mb
2928
2929 2003-09-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2930
2931         * sockets.c: set last error when socket creation fails. This shed some
2932         light on bug #49015.
2933
2934 2003-09-28  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2935
2936         * processes.c: fixed bug #48973: we only change \ by / for the argument
2937         to be used as command.
2938         When getting the program name from the args, don't let the space between
2939         them in the args.
2940
2941 2003-09-24  Bernie Solomon <bernard@ugsolutions.com>
2942
2943         * atomic.h atomic.c: fix sparc so lock is
2944         global, increment does so and it compiles under Sun compiler.
2945
2946 2003-09-22  Bernie Solomon <bernard@ugsolutions.com>
2947
2948         * handles.c: include <string.h> directly as may
2949         not be nested in <sys/un.h> like Linux
2950
2951 2003-09-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
2952
2953         * io.c:
2954         (DeleteFile): call SetLastError on failure. Fix by
2955         richard.torkar@htu.se (Richard Torkar). Closes bug #48222.
2956
2957 2003-09-15  Lluis Sanchez Gual  <lluis@ximian.com>
2958
2959         * daemon.c: In compare_process(), discard handles already signalled.
2960
2961 2003-09-02  Dick Porter  <dick@ximian.com>
2962
2963         * io.c: Work around glib brain-dead assumptions about utf8-encoded
2964         filenames.  Fixes bug 30781.
2965
2966 2003-08-28  Dick Porter  <dick@ximian.com>
2967
2968         * critical-sections.c:  Patch from Bernie Solomon
2969         <bernard@ugsolutions.com> to emit a warning if locking a critical
2970         section fails.
2971
2972 2003-07-23  Dick Porter  <dick@ximian.com>
2973
2974         * shared.c:
2975         * daemon.c (maybe_exit): Avoid the race condition when the daemon is
2976         closing but another client comes along when the shared data is still
2977         visible.  Should fix bugs 33671 and 35213.
2978
2979 2003-07-23  Dick Porter  <dick@ximian.com>
2980
2981         * handles.c:  Initialise handle mutex and cond.  Fix by
2982         Bernie Solomon <bernard@ugsolutions.com>
2983
2984 2003-07-15  Dick Porter  <dick@ximian.com>
2985
2986         * timed-thread.c (timed_thread_start_routine): Fix virtual memory
2987         leak when threads quit.  Fixes bug 44067.
2988
2989 Wed Jun 18 19:08:40 CEST 2003 Paolo Molaro <lupus@ximian.com>
2990
2991         * io.c: never add write permission for group or others in
2992         SetFileAttributes ().
2993
2994 2003-06-17  Dick Porter  <dick@ximian.com>
2995
2996         * io.c (SetFileAttributes): Implement the ReadOnly attribute, and
2997         ignore the unsupported ones ("fixes" bug 44977).
2998
2999 2003-06-17  Lluis Sanchez Gual  <lluis@ximian.com>
3000
3001         * misc.c: fix bug in _wapi_calc_timeout. It gave wrong values for
3002           high ms values (there was an overflow).
3003
3004 2003-06-17  Zoltan Varga  <vargaz@freemail.hu>
3005
3006         * system.h (struct _WapiSystemInfo ): Fix warnings when using gcc-3.3.
3007
3008 2003-06-11  Dick Porter  <dick@ximian.com>
3009
3010         * shared.c: Fix shared directory creation.  Patch from
3011         Pablo Baena <pbaena@uol.com.ar>
3012
3013 2003-06-10  Dick Porter  <dick@ximian.com>
3014
3015         * atomic.c: Delete the useless compile warning
3016
3017 2003-06-09  Dick Porter  <dick@ximian.com>
3018
3019         * daemon.c: Lookup env as a string array.  Fixes bug 44289.  Also
3020         make setting the process handle value in the environment actually
3021         work.
3022
3023         * processes.c: Pretty up the process name, if it happens to be
3024         "mono" such as when another mono process forks "mono foo.exe"
3025
3026 2003-06-05  Dick Porter  <dick@ximian.com>
3027
3028         * processes.c (process_set_current): Don't do an expensive handle
3029         search at application startup, check the environment to see if the
3030         process handle has already been created.
3031
3032         * io.c: Don't do an expensive handle search when creating stdin,
3033         stdout and stderr handles, just create them all the first time one
3034         is requested.
3035
3036         * wapi-private.h:
3037         * shared.c:
3038         * shared.h:
3039         * handles.c:
3040         * handles-private.h:
3041         * daemon-messages.h:
3042         * daemon-private.h:
3043         * daemon.c: Support for "unlimited" number of handles and scratch
3044         data.
3045
3046         Speed up application startup by passing process handle in the
3047         environment, rather than let the app scan all handles (which gets
3048         really slow when there are more than a few thousand to check.)
3049
3050         Initialise some structs passed to syscalls, noticed by valgrind.
3051         
3052
3053 2003-05-20  Dick Porter  <dick@ximian.com>
3054
3055         * io.c (FindFirstFile): Include . files in the glob.  Fixes bug
3056         43229.
3057
3058 2003-05-19  Dick Porter  <dick@ximian.com>
3059
3060         * threads.c: Set the new thread's stack size to 2M.  Fix needed
3061         for BSD, reported by Martin Dvorak <md@9ll.cz>
3062
3063 2003-05-16  Dick Porter  <dick@ximian.com>
3064
3065         * io.h:
3066         * io.c: Implement GetTempPath()
3067
3068 2003-05-16  Dick Porter  <dick@ximian.com>
3069
3070         * processes.c (CreateProcess): Set some error codes
3071
3072 2003-05-12  Dick Porter  <dick@ximian.com>
3073
3074         * misc.c (_wapi_calc_timeout): Cope with overflowing tv_nsec.
3075         Patch from Martin Dvorak <mdvorak@ninell.cz>.
3076
3077 2003-05-10  Dick Porter  <dick@ximian.com>
3078
3079         * io.c (CopyFile): Copy file mode as well as file data.  Based on
3080         suggestion by Giuseppe Greco <giuseppe.greco@agamura.com>, bug
3081         42706.
3082
3083 2003-05-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
3084
3085         * handles.c: don't call GC_gcollect when creating new handles.
3086
3087 2003-05-05  Gonzalo Paniagua Javier <gonzalo@ximian.com>
3088
3089         * handles.c: added some debugging code. Call GC_gcollect
3090         before creating a new handle. It makes Lupus' test run smoother and
3091         faster (from 62 to 83 request per second). Notice that calling
3092         GC_finalizer_notifier if needed (GC_should_invoke_finalizer ()) does
3093         not improve nor degrade the performance, so i don't do it.
3094
3095 2003-05-02  Dick Porter  <dick@ximian.com>
3096
3097         * sockets.c: Rearrange closesocket() and socket_close_private(),
3098         and remember to unref the handle, so we don't leak socket handles.
3099         Fix from Pelle Johnsen <pelle.johnsen@mail.dk>
3100
3101 2003-04-11  Dick Porter  <dick@ximian.com>
3102
3103         * atomic.h: ARM atomic operations by Malte Hildingson
3104         <tds00mahi@tellus.thn.htu.se>
3105
3106 Tue Apr 8 11:37:29 CEST 2003 Paolo Molaro <lupus@ximian.com>
3107
3108         * atomic.h: fix macosx build by "Urs C. Muff" <umuff@quark.com>.
3109
3110 2003-04-03  Martin Baulig  <martin@ximian.com>
3111
3112         The following change is conditional to `WITH_INCLUDED_LIBGC'
3113         which is not yet enabled by default.
3114
3115         * threads.c (SuspendThread, ResumeThread): Fully implemented this.
3116         (gc_init): New static function; install a signal handler for
3117         SIGPWR which is used to suspend threads.  [FIXME: it SIGPWR
3118         doesn't exist on all Unix systems, we need to find another
3119         signal].
3120         (mono_wapi_push_thread_stack): New public function.  Tells the
3121         garbage collector about the current stack pointer of a suspended
3122         thread.
3123
3124 2003-04-03  Martin Baulig  <martin@ximian.com>
3125
3126         * timed-thread.h (TimedThread): Added `suspended_sem',
3127         `suspend_count' and `stack_ptr'.
3128
3129 2003-03-28  Dick Porter  <dick@ximian.com>
3130
3131         * atomic.h: PPC support gratiously donated to the public domain
3132         by John Duncan <jddst19@mac.com>
3133
3134 2003-03-20  Dick Porter  <dick@ximian.com>
3135
3136         * sockets.c (_wapi_connect): If connect() fails with EACCES, try
3137         setting SO_BROADCAST and connecting again.  Fixes bug 39178.
3138
3139 2003-03-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
3140
3141         * processes.c: included Jerome Laban's patch and call SetLastError when
3142         the executable is not found.
3143
3144 2003-03-03  Dick Porter  <dick@ximian.com>
3145
3146         * io.c (CreateFile): Try opening directories readonly, so that
3147         timestamps can be adjusted.  Patch by Elan Feingold
3148         <efeingold@mn.rr.com>.
3149
3150 2003-02-25  Dick Porter  <dick@ximian.com>
3151
3152         * shared.c (_wapi_shm_attach): Return a failure code on system
3153         call errors, rather than exiting.
3154
3155 2003-02-21  Dick Porter  <dick@ximian.com>
3156
3157         * processes.c (GetCurrentProcessId): Use the current process
3158         handle to return the process ID, as getpid() is unreliable
3159         (linuxthreads gives each thread a different pid).  Fixes bug
3160         37550.
3161
3162 2003-02-21  Dick Porter  <dick@ximian.com>
3163
3164         * io.c (FindNextFile): Skip over dangling symlinks.  Fixes bug
3165         34076.
3166
3167 2003-02-11  Dick Porter  <dick@ximian.com>
3168
3169         * timefuncs.h: 
3170         * timefuncs.c: Added GetTickCount()
3171
3172 2003-02-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
3173
3174         * error.c: added WSA_EHOSTUNREACH mapping.
3175
3176 2003-01-26  Miguel de Icaza  <miguel@ximian.com>
3177
3178         * io.c (SetFileAttributes): This routine is not currently
3179         implemented for the general case, but I added a special case to
3180         set the executable bit on Linux.
3181
3182 Wed Jan 15 15:55:40 CET 2003 Paolo Molaro <lupus@ximian.com>
3183
3184         * sockets.h, daemon.c, io.c: compilation fixes on MacOSX.
3185
3186 2003-01-08  Dick Porter  <dick@ximian.com>
3187
3188         * sockets.c: Fixed setting blocking mode to true (fixes bug 36388)
3189
3190 2002-12-11  Juli Mallett  <jmallett@FreeBSD.org>
3191
3192         * daemon.c, handles-private.h, handles.c, wapi-private.h:
3193         Check for an implementation which says it supports
3194         _POSIX_THREAD_PROCESS_SHARED, rather than just one that
3195         defines the symbol.  Defined but with a value of -1 still
3196         means that it is unsupported.
3197
3198 2002-12-08  Martin Baulig  <martin@ximian.com>
3199
3200         * handles.c (_wapi_handle_new): Create new non-shared handles with
3201         an initial refcount of 1, not 0.
3202
3203 2002-11-22  Dietmar Maurer  <dietmar@ximian.com>
3204
3205         * threads.c (TlsGetValue): removed unnecessary mutex
3206
3207 2002-11-20  Dick Porter  <dick@ximian.com>
3208
3209         * timed-thread.c (_wapi_timed_thread_attach): Attached threads
3210         need to store their data structure too.
3211
3212         * threads.c: Make sure the threading data is initialised wherever
3213         it is needed
3214
3215 2002-11-15  Dick Porter  <dick@ximian.com>
3216
3217         * timed-thread.c: Removed unneeded parameters in
3218         _wapi_timed_thread_attach().
3219
3220         * threads.c: Renamed AttachThread() to make it not look like
3221         external API.  Removed unneeded parameters.
3222
3223 2002-11-11  Gonzalo Paniagua Javier <gonzalo@ximian.com>
3224
3225         * error.[ch]: added errno_to_WSA (). It displays a warning and return
3226         WSASYSCALLFAILURE if there is no error mapping for the given errno,
3227
3228         * sockets.c: use errno_to_WSA and fixed display of warning for h_errno.
3229
3230 2002-10-31  Dick Porter  <dick@ximian.com>
3231
3232         * io.h: 
3233         * io.c: Define and use INVALID_FILE_ATTRIBUTES
3234
3235 2002-10-07  Dick Porter  <dick@ximian.com>
3236
3237         * timefuncs.c:
3238         * daemon.c: Use a more accurate time source for process start and
3239         end times.
3240
3241 2002-10-03  Dick Porter  <dick@ximian.com>
3242
3243         * daemon.c:
3244         * handles.c:
3245         * threads.c:  Fixes for freebsd.  Make sure that mutex and condition
3246         creation and deletion happen in the process that owns them, when
3247         POSIX shared thread objects aren't supported.  This breaks on
3248         freebsd, as pthread_t is a pointer to data.
3249
3250 2002-10-02  Dick Porter  <dick@ximian.com>
3251
3252         * shared.c: Use mmap() instead of sysv shm for the shared data.
3253
3254         * wapi-private.h (_WAPI_HANDLE_VERSION): Reset back to 0, for the
3255         new system
3256
3257         * daemon-private.h: 
3258         * daemon.c: mmap()ed regions survive fork, so just pass the
3259         pointer to _wapi_daemon_main instead of mapping it again.
3260
3261 2002-10-01  Dick Porter  <dick@ximian.com>
3262
3263         * timed-thread.c: Kludge for CREATE_SUSPENDED thread creation.
3264         Unfortunately libgc uses the same thread suspend technique that I
3265         want to, and the two don't mix: libgc will deadlock when it tries
3266         to stop the world if a thread has already been suspended by
3267         someone else.  Just do the simple suspended create rather than the
3268         general purpose thread suspension for now.
3269
3270         * threads.c: Pass create flags to the timed_thread create call, to
3271         implement suspended thread creation.  ResumeThread() partially
3272         implemented, to cope with the case where a newly created but
3273         suspended thread is launched.
3274
3275 2002-09-30  Dick Porter  <dick@ximian.com>
3276
3277         * sockets.c (ioctlsocket): Set non-blocking mode in a better way,
3278         with fcntl.
3279
3280 2002-09-27  Dick Porter  <dick@ximian.com>
3281
3282         * semaphores.c: Only include semaphore.h if it's present. Patch
3283         for BSD from jmmv@hispabsd.org (Julio Merino).
3284
3285 2002-09-27  Dick Porter  <dick@ximian.com>
3286
3287         * processes.c: Pass environment and working directory to the
3288         daemon when forking.  Don't let argv[0] be duplicated when looking
3289         for the program name.  Implement EnumProcessModules (simple
3290         version for now, lsof-style later if needed), GetModuleBaseName,
3291         {Get,Set}ProcessWorkingSetSize (just faked, because the vm hints
3292         aren't available on Linux).
3293
3294         * process-private.h: Store the process name, and the working set
3295         min and max
3296
3297         * handles.c:
3298         * handles-private.h: New functions to store and retrieve an array
3299         of strings in the scratch space
3300
3301         * daemon.c: Don't miss deleting some handles when a client exits
3302         (we used to rely on the client doing the final cleanup, but
3303         obviously if the client is no longer there the daemon has to do
3304         it).
3305
3306         Process forking now sets the environment and the working
3307         directory.
3308
3309         * io.c: Don't confuse fd 0 with an unassigned handle struct
3310
3311         * atomic.h: Add a google cache alternative to the msdn URL
3312
3313 2002-09-25  Gonzalo Paniagua Javier <gonzalo@ximian.com>
3314
3315         * sockets.c:
3316         (_wapi_recvfrom): added ECONNRESET to the switch.
3317
3318 2002-09-24  Mark Crichton  <crichton@gimp.org>
3319
3320         * atomic.h: Yea.  On linux, sparc isn't sparc, it's __sparc__.
3321         Added to ifdef.
3322
3323 2002-09-19  Mark Crichton  <crichton@gimp.org>
3324
3325         * daemon.c, shared.c: Added NEED_LINK_UNLINK for systems that
3326         dont have Linux's abstract filesystem for sockets.
3327
3328 2002-09-19  Mark Crichton  <crichton@gimp.org>
3329
3330         * atomic.h: Added SPARC atomic asm code.
3331         * daemon.c, handles-private.h, handles.c, wapi-private.h:
3332         undefined _POSIX_THREAD_PROCESS_SHARED.  This actually exists on
3333         Solaris 9, however, the code paths don't seem to work.  More testing
3334         on the shared case is *really* needed.
3335
3336 2002-09-03  Dick Porter  <dick@ximian.com>
3337
3338         * threads.h: 
3339         * threads.c: Removed PosixKillThread(), because it's not in the
3340         w32 api
3341
3342 2002-08-20  Dick Porter  <dick@ximian.com>
3343
3344         * handles.c (_wapi_handle_scratch_store): Made stored byte lengths
3345         multiples of 4 bytes, to keep header structures aligned.  Needed
3346         for sparc, at least. (Patch from crichton@gimp.org)
3347
3348         * handles.c: Removed 'disable_shm' variable (we've defaulted to
3349         building with shm enabled for months now)
3350
3351 2002-08-19  Dick Porter  <dick@ximian.com>
3352
3353         * daemon.c: Rewrote the poll() loop to use GIOChannels instead,
3354         for legacy NeXT-based systems.
3355
3356 2002-08-12  Dick Porter  <dick@ximian.com>
3357
3358         * atomic.h: Rename some parameters to avoid c++ keywords (Patch
3359         from Joseph Wenninger <kde@jowenn.at>)
3360
3361 2002-08-05  Dietmar Maurer  <dietmar@ximian.com>
3362
3363         * threads.c: use fast spinlocks by default
3364
3365 2002-08-02  Dick Porter  <dick@ximian.com>
3366
3367         * io.c (GetStdHandle): Add a handle reference when returning a
3368         duplicate console handle.  This fixes the unref_handle errors in
3369         NUnit.
3370
3371 2002-08-01  Dietmar Maurer  <dietmar@ximian.com>
3372
3373         * threads.c (TLS_PTHREAD_MUTEX): define this because else some
3374         tests does not work
3375
3376 2002-08-01  Dick Porter  <dick@ximian.com>
3377
3378         * threads.c: Use atomic spinlocks in TLS functions
3379
3380         * mono-spinlock.h:
3381         * Makefile.am: Added mono-spinlock.h
3382
3383 2002-07-21  Jeffrey Stedfast  <fejj@ximian.com>
3384
3385         * daemon-messages.c: #include <sys/types.h> and <sys/sockets.h> -
3386         these are needed for sendmsg() and also for struct msghdr (at
3387         least on Solaris). Solaris still won't build because struct msghdr
3388         doesn't have msg_flags, msg_control, or msg_controllen members.
3389         (CMSG_SPACE): Define for systems that don't have it.
3390         (CMSG_LEN): Same.
3391
3392 2002-07-20  Dick Porter  <dick@ximian.com>
3393
3394         * wapi-private.h:
3395         * io-private.h:
3396         * io.h:
3397         * io.c:
3398         * handles.c: Implemented pipe handles
3399         
3400         * handles.c:
3401         * daemon.c: Fixed bug in handle closing.
3402
3403         * shared.c:
3404         * daemon.c: Forked processes now close all open file descriptors.
3405
3406 Fri Jul 19 19:05:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
3407
3408         * sockets.h, io-layer.h, critical-sections.h: don't include config.h
3409         in header files.
3410
3411 2002-07-19  Martin Baulig  <martin@gnome.org>
3412
3413         * threads.c (ExitThread): Call exit() if no threads has been
3414         created yet.
3415
3416 2002-07-17  Dick Porter  <dick@ximian.com>
3417
3418         * daemon-messages.c: Freebsd fixes from Andreas Kohn
3419         <andreas.kohn@gmx.net>
3420
3421 2002-07-15  Dick Porter  <dick@ximian.com>
3422
3423         * io.c: Removed bogus console_flush() method, that was just cut
3424         and pasted from file_flush when I separated the two handle types.
3425
3426 2002-07-12  Dick Porter  <dick@ximian.com>
3427
3428         * io.c (convert_from_flags): Fixed misunderstanding wrt fcntl
3429         flags.  Fixes bug 27633.
3430
3431 2002-07-12  Dick Porter  <dick@ximian.com>
3432
3433         * wapi-private.h:
3434         * handles.c:
3435         * daemon.c: Use size of sockaddr_un.sun_path from config.h
3436
3437 2002-07-12  Dick Porter  <dick@ximian.com>
3438
3439         * processes.c (CreateProcess): Send stdin, stdout and stderr
3440         handles if the startup info doesnt specify new ones
3441
3442         * io.c (GetStdHandle): Return the same handle when the same
3443         standard handle is requested
3444
3445         * handles.c: Pass file descriptors when forking
3446
3447         * daemon.c: Use supplied file descriptors when forking a new
3448         process
3449
3450         * daemon-messages.h: 
3451         * daemon-messages.c: Pass stdin, stdout and stderr file
3452         descriptors to the daemon (used when forking)
3453
3454 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
3455
3456         * daemon.c (_wapi_daemon_main): Use sizeof
3457         (main_socket_address.sun_path) instead of hardcoded 108 value.
3458
3459         * handles.c (shared_init): Use sizeof
3460         (shared_socket_address.sun_path) instead of hardcoded 108 value.
3461
3462 2002-07-10  Dennis Haney  <davh@davh.dk>
3463
3464         * shared.c:
3465         * handles.c:
3466         * daemon.c: Lots of documentation, some added error checking, and
3467         code readability improvements.
3468
3469         * daemon-messages.h: Add the Error request type to improve error
3470         checking.
3471
3472         * daemon-messages.c: Do a bit more error checking on send() and
3473         recv(), and log errors with a higher severity level.
3474
3475 2002-07-04  Dick Porter  <dick@ximian.com>
3476
3477         * daemon.c (process_process_fork): Fix argument handling, due to
3478         buggy understanding of g_strsplit() behaviour.
3479
3480 2002-07-03  Dick Porter  <dick@ximian.com>
3481
3482         * threads.h:
3483         * threads.c: Implement OpenThread().  Define access-control values
3484         for thread handles.
3485
3486         * wapi.h:
3487         * processes.h:
3488         * access.h:
3489         * Makefile.am: Added access.h, to hold shared access-control
3490         definitions
3491
3492 2002-07-02  Dick Porter  <dick@ximian.com>
3493
3494         * wapi-private.h (_WAPI_HANDLE_VERSION): New protocol version
3495         
3496 2002-07-02  Dick Porter  <dick@ximian.com>
3497
3498         * handles.c (shared_init): Make a second attempt to contact the
3499         daemon if the shared memory attach succeeds, but the connect()
3500         fails. (This copes with the daemon crashing without cleaning up
3501         the shared memory.)
3502
3503         * Makefile.am: 
3504         * daemon-private.h:
3505         * daemon.c:
3506         * shared.c (_wapi_shm_attach): Don't exec() anything when we fork
3507         the daemon, it's now built into the library.
3508
3509 2002-06-25  Dick Porter  <dick@ximian.com>
3510
3511         * handles.c:
3512         * handles-private.h:
3513         * daemon-messages.h:
3514         * daemon.c: Process forking and handle data management
3515
3516         * processes.h:
3517         * process-private.h:
3518         * processes.c: Process forking and other support functions
3519
3520 2002-06-25  Dick Porter  <dick@ximian.com>
3521
3522         * versioninfo.h: PE resource decoding
3523
3524         * unicode.c (_wapi_unicode_to_utf8): g_utf16_to_utf8 doesnt need
3525         to be told the string length
3526
3527         * io.c: Removed the ACTUALLY_DO_UNICODE option.  Fixed some leaks.
3528         Moved _wapi_time_t_to_filetime and the WapiFileTime typedef to
3529         timefuncs.c
3530
3531 2002-06-12  Dick Porter  <dick@ximian.com>
3532
3533         * daemon.c: 
3534         * daemon-messages.c: Handle SIGPIPE in a non-stupid way in the
3535         daemon, if MSG_NOSIGNAL isn't available.  Thanks to Jaroslaw
3536         Kowalski <jarek@atm.com.pl> for pointing out the bogosity.
3537
3538 2002-06-10  Jaroslaw Kowalski <jarek@atm.com.pl>
3539
3540         * sockets.c, daemon-messages.c: Prevent SIGPIPE from being raised
3541         when writing to a closed socket.
3542
3543 2002-06-08  Jeffrey Stedfast  <fejj@ximian.com>
3544
3545         * mono-mutex.c (mono_once): New convenience function for my
3546         previous fix.
3547
3548         * handles.c:
3549         * error.c: 
3550         * critical-sections.c: 
3551         * threads.c: 
3552         * sockets.c: 
3553         * semaphores.c: 
3554         * processes.c: 
3555         * mutexes.c: 
3556         * io.c: 
3557         * events.c: 
3558         * atomic.c: Use mono_once() rather than pthread_once().
3559
3560 2002-06-06  Jeffrey Stedfast  <fejj@ximian.com>
3561
3562         * handles.c (_wapi_handle_new): pthread_once() is not atomic, so
3563         if multiple threads all try to call _wapi_handle_new() before the
3564         shared data has been initialized, it is possible that we could get
3565         into a condition where shared_init() is being executed and later
3566         threads will pass by pthread_once() due to the fact that it has
3567         already been called and so therefor will attempt to use the shared
3568         data before it has been completely initialized. If we instead use
3569         a standard mutex locking mechanism around shared_init(), we can
3570         avoid the situation entirely. By wrapping the mutex locking in a
3571         check to see if we've already initialized the data, we can even
3572         avoid wasting resources by having to lock/unlock the mutex in any
3573         later calls (the only time we'd have to worry about
3574         locking/unlocking is the initial race to call shared_init() at
3575         startup).
3576
3577 Sat Jun 1 13:27:11 CEST 2002 Paolo Molaro <lupus@ximian.com>
3578
3579         * atomic.h: inline asm fixes from Dennis Haney (davh@davh.dk).
3580
3581 Fri May 31 16:21:54 CEST 2002 Paolo Molaro <lupus@ximian.com>
3582
3583         * daemon.c, handles.c: rename "sun" local var since it's apparently
3584         a #define on Solaris.
3585
3586 Fri May 31 15:40:14 CEST 2002 Paolo Molaro <lupus@ximian.com>
3587
3588         * daemon-messages.c: work-around MSG_NOSIGNAL missing on some
3589         platforms.
3590
3591 2002-05-15  Dick Porter  <dick@ximian.com>
3592
3593         * wait.c: Fix a deadlock in WaitForMultipleObjects
3594
3595 2002-05-14  Dick Porter  <dick@ximian.com>
3596
3597         * io.c: Fix a cut&paste error, found by
3598         Jaroslaw Kowalski <jarek@atm.com.pl>
3599
3600 2002-05-10  Dan Lewis  <dihlewis@yahoo.co.uk>
3601
3602         * io.c: Nasty typo.
3603
3604 2002-05-09  Dick Porter  <dick@ximian.com>
3605
3606         * threads.c: 
3607         * semaphores.c: 
3608         * processes.c: 
3609         * mutexes.c: 
3610         * handles-private.h: 
3611         * events.c: 
3612         * Makefile.am: Remove now-unused file wait-private.h
3613
3614 2002-05-08  Dick Porter  <dick@ximian.com>
3615
3616         * shared.c: Better error messages, and report when daemon
3617         connection fails rather than blocking forever.  Do some more
3618         shared memory sanity checking.
3619
3620         * handles.c: Better error messages when connecting to shared
3621         memory and the handle daemon.  Fall back to non-shared handles if
3622         an error occurs.  Set the default back to 'shared handles'.  Fix a
3623         crashing bug in scratch space allocation that mangled the block
3624         headers.
3625
3626 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
3627
3628         * handles.c (shared_init): Disable SHM for now, people have too
3629         many problems with this, and the diagnostics are not helping.
3630
3631 2002-05-06  Dan Lewis  <dihlewis@yahoo.co.uk>
3632
3633         * io.c: CreateFile sets win32 last error.
3634
3635 2002-05-05  Dick Porter  <dick@ximian.com>
3636
3637         * wapi-private.h: 
3638         * handles-private.h:
3639         * io.c: 
3640         * io-private.h:
3641         * mutexes.c: 
3642         * mutex-private.h: 
3643         * processes.c: 
3644         * process-private.h: 
3645         * semaphores.c: 
3646         * semaphore-private.h: 
3647         * sockets.c: 
3648         * socket-private.h: 
3649         * events.c: 
3650         * event-private.h: Simplify the WapiHandleOps struct: take out all
3651         the file-specific entries, leaving just the items that operate on
3652         handles themselves.  Split the close operation into shared and
3653         private parts: shared close is called by the daemon.
3654
3655         * handles.c: As above, but also pass handle allocation, ref and
3656         unref operations to the daemon.  Populate the handle_ops array at
3657         compile time, because the daemon needs to call ops on handles too.
3658         Don't bother to track open handle counts any more, the daemon does
3659         that.
3660         
3661         * threads.c: 
3662         * thread-private.h: As above, but also make the thread data
3663         handle-private.
3664
3665         * shared.c: Fork a handle daemon if the calling process created
3666         the shared memory segment.
3667
3668         * daemon.c:
3669         * daemon-messages.c:
3670         * daemon-messages.h:
3671         * Makefile.am: Build a daemon to manage handle allocation and
3672         destruction without needing to lock the shared memory
3673
3674 2002-04-30  Jeffrey Stedfast  <fejj@ximian.com>
3675
3676         * atomic.c: Changed to use a normal mutex rather than a spinlock
3677         since a lot of platforms seem to not have them :\
3678
3679 2002-04-30  Dick Porter  <dick@ximian.com>
3680
3681         * Completely rewrote the handle waiting code: removed the helper
3682         thread and its attendant complexity.  All handle waiting is now
3683         abstracted into the WaitForSingleObject() and
3684         WaitForMultipleObjects() functions.
3685
3686         * Implemented inter-process sharing of handles using sysv shared
3687         memory.  This makes handles even more opaque, with a handle now
3688         just an index into an array.
3689         
3690 2002-04-25  Dan Lewis  <dihlewis@yahoo.co.uk>
3691
3692         * io.c: unitialized pointer in GetCurrentDirectory.
3693
3694 Sat Apr 20 13:37:39 CEST 2002 Paolo Molaro <lupus@ximian.com>
3695
3696         * threads.c: destroy the mutex at thread destruction
3697         (if/when thread destruction code will be actually called).
3698         When protecting a tls data pointer from the gc, use also the 
3699         thread id in the key.
3700         
3701 Wed Apr 17 18:36:27 CEST 2002 Paolo Molaro <lupus@ximian.com>
3702
3703         * timed-thread.c: avoid race condition when setting the thread to
3704         detached.
3705
3706 2002-04-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
3707
3708         * jit.h: to more #include lines to avoid breaking compilation
3709         under windows when upgrading mingw and w32api to version
3710         1.3 (thanks Dick!).
3711
3712 2002-04-16  Dick Porter  <dick@ximian.com>
3713
3714         * atomic.h: Explanatory comment about lack of 80386 support
3715
3716 2002-04-15  Dick Porter  <dick@ximian.com>
3717
3718         * atomic.h: use xaddl for InterlockedIncrement() and
3719         InterlockedDecrement().  Use cmpxchgl in a loop for
3720         InterlockedExchange() and InterlockedExchangePointer().
3721
3722 Mon Apr 15 13:31:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
3723
3724         * unicode.c: fix unicode_len() to not access uninitialized memory
3725         (and updated to conform to mono code style).
3726
3727 Fri Mar 29 17:15:11 CET 2002 Paolo Molaro <lupus@ximian.com>
3728
3729         * io.c: EEXISTS is ignored for directory creation.
3730         * mono-mutex.h: remove silly "pragma }" that emacs users insert
3731         because they use a broken editor:-)
3732
3733 2002-03-28  Dick Porter  <dick@ximian.com>
3734
3735         * sockets.h: 
3736         * sockets.c: 
3737         * io.c: 
3738         * handles.h: 
3739         * handles.c: Warning cleanups
3740
3741 2002-03-27  Dan Lewis <dihlewis@yahoo.co.uk>
3742
3743         * unicode.h, unicode.c: changed to gunichar2
3744         * io.h, io.c: changed strings to gunichar2*, added
3745         SetFileAttributes(), GetCurrentDirectory(), SetCurrentDirectory(),
3746         some fixes to FindFirstFile() and friends.
3747
3748 2002-03-26  Dick Porter  <dick@ximian.com>
3749
3750         * types.h: Implement the large integer struct
3751
3752         * timefuncs.h:
3753         * timefuncs.c: Dummy functions that don't yet implement
3754         QueryPerformanceCounter() and QueryPerformanceFrequency()
3755
3756         * threads.h:
3757         * threads.c: Implement SleepEx()
3758
3759         * system.h:
3760         * system.c: Beginnings of GetSystemInfo()
3761
3762         * mono-mutex.c (pthread_mutex_timedlock): Fix a ms/ns conversion
3763         thinko
3764
3765         * context.h:
3766         * context.c: Dummy function that doesnt yet implement
3767         GetThreadContext()
3768
3769         * atomic.h: 
3770         * atomic.c: Interlocked functions
3771
3772 Mon Mar 25 13:01:40 CET 2002 Paolo Molaro <lupus@ximian.com>
3773
3774         * threads.c: use a gc-safe hash table to store tls pointers.
3775
3776 2002-03-22  Dick Porter  <dick@ximian.com>
3777
3778         * threads.c: Fix a race condition where a thread can start and
3779         exit before the handle has been properly initialised (no reason
3780         why the handle couldn't be initialised beforehand, so do so)
3781
3782         Fix a ms to ns conversion magnitude thinko.
3783
3784 2002-03-21  Dick Porter  <dick@ximian.com>
3785
3786         * semaphores.c: Fix a problem when waiting for one or more
3787         semaphores, and another semaphore is Released (all waiting
3788         semaphores assumed they were signalled)
3789
3790 2002-03-29  Dan Lewis <dihlewis@yahoo.co.uk>
3791
3792         * io.h, io.c, uglify.h: added MoveFile, CopyFile, CreateDirectory,
3793         RemoveDirectory, GetFileAttributes, GetFileAttributesEx
3794
3795 2002-03-19  Dietmar Maurer  <dietmar@ximian.com>
3796
3797         * threads.c (Sleep): bug fix: 1ms == 1000000ns
3798
3799 2002-03-19  Dan Lewis <dihlewis@yahoo.co.uk>
3800
3801         * io.h, io.c, events.c, mutexes.c, semaphores.c, sockets.c,
3802         threads.c, io.c: added flush method to handles.
3803
3804         * io.c: FlushFileBuffers() and FindFirstFile() functions.
3805
3806 Thu Mar 7 17:21:52 CET 2002 Paolo Molaro <lupus@ximian.com>
3807
3808         * threads.c, timed-thread.c, wait.c: Boehm-GC anable.
3809
3810 2002-02-20  Dick Porter  <dick@ximian.com>
3811
3812         * io-layer.h: Always build without cygwin support on windows
3813
3814 Mon Feb 18 15:50:59 CET 2002 Paolo Molaro <lupus@ximian.com>
3815
3816         * sockets.c: #undef DEBUG.
3817
3818 2002-02-14  Jeffrey Stedfast  <fejj@ximian.com>
3819
3820         * io-layer.h: conditionally include sys/filio.h and sys/sockio.h
3821         for FIONBIO, FIONREAD, and SIOCATMARK.
3822
3823 2002-02-14  Jeffrey Stedfast  <fejj@ximian.com>
3824
3825         * sockets.c: conditionally include sys/filio.h and sys/sockio.h
3826         for FIONBIO, FIONREAD, and SIOCATMARK.
3827
3828 2002-02-13  Dick Porter  <dick@ximian.com>
3829
3830         * sockets.c: Implement shutdown and select
3831
3832 2002-02-13  Jeffrey Stedfast  <fejj@ximian.com>
3833
3834         * mono-mutex.[c,h]: New source files that thinly wrap all pthread
3835         functions that take pthread_mutex_t and/or pthread_mutexattr_t
3836         arguments for the sake of portability. Implements recursive
3837         mutexes and pthread_mutex_timedlock.
3838
3839         * critical-sections.c:
3840         * events.c:
3841         * handles.c:
3842         * mutexes.c:
3843         * semaphores.c:
3844         * threads.c:
3845         * timed-thread.c:
3846         * wait.c: Use the mono-mutex wrapper portability functions/macros.
3847
3848         * pthread-compat.[c,h]: Replaced by mono-mutex.[c,h]
3849
3850 2002-01-23  Dick Porter  <dick@ximian.com>
3851
3852         * sockets.c: Networking support, mostly wrapping BSD socket APIs
3853         with handle code, and translating errno into w32 error codes.
3854
3855         * macros.h: Some w32 macros used with the socket support
3856
3857         * error.c: Implemented GetLastError() and SetLastError()
3858
3859         * Makefile.am: Added sockets, with kludge to override some symbols
3860
3861 2001-12-17  Dietmar Maurer  <dietmar@ximian.com>
3862
3863         * unicode.c (_wapi_unicode_to_utf8): byteswap UTF16 strings before
3864         passing them to iconv
3865         (_wapi_unicode_to_utf8): only swap bytes on LE systems, remove bug
3866         from previous commit.
3867
3868 2001-12-11  Dick Porter  <dick@ximian.com>
3869
3870         * io.c: Implement DeleteFile(), GetFileTime(), SetFileTime() and
3871         FileTimeToSystemTime().
3872
3873         * unicode.c (unicode_len): Nasty way of finding length of unicode
3874         string with embedded NULLs (counts until two NULLs together).
3875
3876         * mutexes.c (mutex_close): 
3877         * events.c (event_close): Release the internal pthreads resources
3878
3879 2001-11-26  Dick Porter  <dick@ximian.com>
3880
3881         * critical-sections.c:
3882         * events.c:
3883         * handles.c:
3884         * io.c:
3885         * mutexes.c:
3886         * semaphores.c:
3887         * threads.c:
3888         * timed-thread.c:
3889         * wait.c: turn off DEBUG messages
3890
3891 2001-11-22  Dick Porter  <dick@ximian.com>
3892
3893         * handles.c (SignalObjectAndWait): Implement
3894
3895         * wait.c (WaitForSingleObject): Fix case where timeout == 0
3896
3897         * threads.c:
3898         * semaphores.c:
3899         * mutexes.c:
3900         * io.c:
3901         * events.c: Support for SignalObjectAndWait
3902         
3903 2001-11-21  Dick Porter  <dick@ximian.com>
3904
3905         * events.c:
3906         * handles.c:
3907         * mutexes.c:
3908         * semaphores.c:
3909         * threads.c:
3910         * wait.c: Reliable method of returning which handle was signalled
3911         on return from WaitForMultipleObjects().
3912
3913 2001-11-21  Dick Porter  <dick@ximian.com>
3914
3915         * events.c: Implement events
3916
3917 2001-11-15  Dick Porter  <dick@ximian.com>
3918
3919         * mutexes.c: Implement mutexes
3920
3921         * threads.c: 
3922         * semaphores.c: 
3923         * misc.c: Factor out some common code
3924
3925 2001-11-13  Dick Porter  <dick@ximian.com>
3926
3927         * threads.c: Implement TLS.  Implement GetCurrentThreadId(), and
3928         GetCurrentThread() by maintaining a hash of thread handles.
3929
3930         * threads.h: Define thread and process creation flags
3931
3932 2001-11-12  Dick Porter  <dick@ximian.com>
3933
3934         * critical-sections.c: Implement critical sections
3935
3936 2001-11-12  Dick Porter  <dick@ximian.com>
3937
3938         * semaphores.c: Implement semaphores
3939
3940         * wait.c (wait_for_item): Maintain a wait count rather than count
3941         signalled booleans.
3942
3943         * threads.c (thread_wait_multiple): Don't lock the wait item, that
3944         will block other wait threads
3945
3946 2001-11-11  Dick Porter  <dick@ximian.com>
3947
3948         * Makefile.am: Rename some automake variables
3949         (from Nick Drochak <ndrochak@gol.com>)
3950
3951 2001-11-10  Dick Porter  <dick@ximian.com>
3952
3953         * Makefile.am (libwapiincludedir): Fix include destination
3954
3955         * .cvsignore: Ignore generated files
3956
3957 2001-11-10  Dietmar Maurer  <dietmar@ximian.com>
3958
3959         * pthread-compat.c: added some include files to make it compile on
3960         linux.
3961
3962 2001-11-08  Dick Porter  <dick@ximian.com>
3963
3964         * Initial checkin.
3965
3966         This is a library emulating the win32 threading and IO API.