2005-06-30 Dick Porter <dick@ximian.com>
[mono.git] / mono / io-layer / ChangeLog
1 2005-06-30  Dick Porter  <dick@ximian.com>
2
3         * shared.c (_wapi_shm_semaphores_init): Add some helpful error
4         messages when semget () fails due to lack of resources.
5
6 2005-06-21  Dick Porter  <dick@ximian.com>
7
8         * mutex-private.h:
9         * thread-private.h:
10         * mutexes.c: 
11         * threads.c: Keep a list of owned mutexes in each thread handle,
12         so that it is easier to abandon them when the thread exits.
13         Removes a bottleneck when multiple threads are finishing in
14         parallel.
15
16 2005-06-12 Gonzalo Paniagua Javier <gonzalo@ximian.com>
17
18         * io.c: (GetLogicalDrives) when a bogus line is read, don't leak memory.
19         When the buffer has not enough space, close the file before returning.
20
21 2005-06-09  Duncan Mak  <duncan@novell.com>
22
23         * *.h: Added G_BEGIN_DECLS and G_END_DECLS where appropriate to
24         all public headers. Fixes #74919.
25
26 2005-05-30  Zoltan Varga  <vargaz@freemail.hu>
27
28         * atomic.h: Add IA64 atomic ops.
29
30 2005-05-26 Gonzalo Paniagua Javier <gonzalo@ximian.com>
31
32         * processes.c: make ExitCode be valid even if the user didn't call
33         WaitForExit() and is just polling on HasExited.
34
35 2005-05-17  Dick Porter  <dick@ximian.com>
36
37         * io.c (file_getfilesize): Clear the error value, so that files
38         with sizes with the low bits 0xFFFFFFFF can be distinguished from
39         a genuine error.
40
41 2005-05-11 Gonzalo Paniagua Javier <gonzalo@ximian.com>
42
43         * shared.c: forgot to ignore a warning.
44
45 2005-05-10 Gonzalo Paniagua Javier <gonzalo@ximian.com>
46
47         * shared.c: don't display warnings after reboots.
48
49 2005-05-07 Gonzalo Paniagua Javier <gonzalo@ximian.com>
50
51         * sockets.c: on windows, getsockopt/setsockopt for send/receive timeout
52         use an integer in milliseconds. We were using a struct timeval.
53
54 2005-05-06  Dick Porter  <dick@ximian.com>
55
56         * handles-private.h: 
57         * mutexes.c: 
58         * wapi-private.h: 
59         * shared.h:
60         * shared.c: 
61         * wait.c: 
62         * handles.c: 
63         * collection.h: Use SysV semaphores for managing access to the
64         shared memory - in return for the ludicrous api we get
65         synchronisation primitives that can be cleaned up by the kernel
66         even when a process quits unexpectedly.  This removes the
67         timestamp issues.
68
69 2005-05-05  Lluis Sanchez Gual  <lluis@novell.com>
70
71         * handles.c: Always use polling in the waits, since
72         mono_cond_timedwait can't be interruped by the thread abort signal.
73
74 2005-04-30 Gonzalo Paniagua Javier <gonzalo@ximian.com>
75
76         * events.c: calling Set on AutoResetEvent several times has the same
77         effect as calling it only once if no thread is waiting for it.
78
79 2005-04-29  Dick Porter  <dick@ximian.com>
80
81         * processes.c (EnumProcesses): Use a GArray instead of a GPtrArray
82         now it's storing pids not handles, also fixes memory leak caused
83         by unclear glib documentation.
84
85         * sockets.c (WSACleanup): Remove unused variable
86
87 2005-04-29  Dick Porter  <dick@ximian.com>
88
89         * handles.c (_wapi_handle_check_share_by_pid): For systems that
90         don't have file descriptor info in /proc check that the original
91         opener of a file is still there, if a share violation would
92         otherwise happen.
93
94 2005-04-28 Gonzalo Paniagua Javier <gonzalo@ximian.com>
95
96         * handles.c:
97         * handles-private.h: added _wapi_handle_forecch that loops through all
98         the handles and call a callback function when a handle of the given
99         type is found.
100
101         * sockets.c: no need to keep open sockets in an array, as we have them 
102         in the handles structure.
103
104         Fixes bug #74755.
105
106 2005-04-28  Dick Porter  <dick@ximian.com>
107
108         * processes.c: Cope with handles that are only around for as long
109         as the search is running.  If we're searching for process handles,
110         check to see if the process is still running and signal it if not.
111
112         * handles.c (_wapi_search_handle): Search in the shared space as
113         well.  Fixed bug 74752.
114
115         * mutexes.c:
116         * handles.c (_wapi_handle_new_from_offset):
117         _wapi_handle_new_for_existing_ns () was doing exactly the same as
118         this, so deleted it.
119
120 2005-04-26  Dick Porter  <dick@ximian.com>
121
122         * handles.c: Fix stupid thinko where if a new shared handle is
123         created but a collection was needed to free some space, it
124         returned an error anyway.  Should fix the messages shown in bug
125         74659.
126
127 2005-04-25  Dick Porter  <dick@ximian.com>
128
129         * handles.c (_wapi_handle_check_share): Only consider mono
130         processes when looking to see if a file is still being held open,
131         while checking share permissions.
132
133 2005-04-25  Dick Porter  <dick@ximian.com>
134
135         * sockets.c: 
136         * io.c: 
137         * wapi-private.h (struct _WapiHandleOps): 
138         * handles.c (_wapi_handle_unref): When destroying handles, save
139         the handle data and call the close function only after the array
140         slot has been cleared.  This prevents race conditions with file
141         descriptors, fixing bug 74713.
142
143         * mutexes.c: Delete the handle close functions, they didn't do
144         anything anyway
145
146         * error.c (_wapi_get_win32_file_error): Add a mapping for EINTR so
147         the "Unknown error" g_warning doesn't get displayed.
148
149 2005-04-25  Dick Porter  <dick@ximian.com>
150
151         * wapi-private.h: 
152         * threads.c: Make thread handles process-private for now to take
153         some of the space pressure off the shared memory, while I work on
154         a real fix.
155
156 2005-04-21  Dick Porter  <dick@ximian.com>
157
158         * handles.c (_wapi_handle_check_share): Make sure there is a "fd"
159         dir in /proc before blowing away handle info.  Fixes bug 74649.
160
161 2005-04-21  Dick Porter  <dick@ximian.com>
162
163         * wait.c (WaitForMultipleObjectsEx): Implement special waits
164
165         * handles.c (_wapi_handle_wait_signal_poll_share): Don't return a
166         timeout, just wait briefly for the private signals and let the
167         waiting thread test again.  This prevents us missing shared
168         signals.
169
170 2005-04-21  Dick Porter  <dick@ximian.com>
171
172         * collection.h (_WAPI_HANDLE_COLLECTION_EXPIRED_INTERVAL): Reduce
173         the time before a slot is considered too old and deleted.  This is
174         a workaround while I come up with a proper fix.
175
176 2005-04-21  Dick Porter  <dick@ximian.com>
177
178         * mutexes.c: 
179         * processes.c: 
180         * threads.c: 
181         * handles.c (_wapi_handle_new): Turn assertions into errors.
182
183         * collection.c (_wapi_handle_collect): Use symbols not magic
184         numbers for timeout values
185
186 2005-04-19  Dick Porter  <dick@ximian.com>
187
188         * mutexes.c: 
189         * wait.c: 
190         * handles.c (_wapi_handle_count_signalled_handles)
191         * handles-private.h (_wapi_handle_shared_lock_handle): Use new
192         shared handle locks in critical sections.
193
194         * handles.c (_wapi_handle_new_for_existing_ns): Reuse old handles
195         if there is already one there.
196         
197         * handles.c (_wapi_handle_ref): It was possible for a process to
198         exit before getting around to updating shared handle timestamps,
199         so do it here too.
200
201 Tue Apr 19 16:25:47 CEST 2005 Paolo Molaro <lupus@ximian.com>
202
203         * threads.c: fix lookup of the thread id in the has table:
204         always use the id value, not the pointer to the id.
205
206 2005-04-18 Gonzalo Paniagua Javier <gonzalo@ximian.com>
207
208         * handles.c: fix handle returned in _wapi_handle_search_handle. Dick
209         pointed it out.
210
211 2005-04-16 Gonzalo Paniagua Javier <gonzalo@ximian.com>
212
213         * io-layer/sockets.c: FIONBIO with a TRUE argument means we want
214         non-blocking IO, not the other way around.
215
216 2005-04-16 Gonzalo Paniagua Javier <gonzalo@ximian.com>
217
218         * handles.c:
219         * io.c:
220         * handles-private.h: GetFileType wasn't checking if we have memory
221         allocated for the handle before dereferencing it. Fixes a FileStream
222         nunit test.
223
224 2005-04-16 Gonzalo Paniagua Javier <gonzalo@ximian.com>
225
226         * handles.c:
227         * processes.c:
228         * handles-private.h: we were calling g_renew to expand the handle array,
229         but that might move the memory and we might have pthread conditions or
230         mutexes in the original memory area that are being used. Now instead of
231         expanding an existing array, we just create new ones and keep a list of
232         them. Access to _wapi_private_handles had to be modified accordingly.
233
234 2005-04-15  Dick Porter  <dick@ximian.com>
235
236         * collection.c: FreeBSD needs more than PTHREAD_STACK_MIN
237
238 2005-04-14  Raja R Harinath  <rharinath@novell.com>
239
240         * wapi-private.h: Remove reference to 'daemon-private.h'.
241
242 Wed Apr 13 13:12:33 EDT 2005 Paolo Molaro <lupus@ximian.com>
243
244         * atomic.h: applied patch from mass@akuma.org (David Waite)
245         to fix InterlockedExchangeAdd.
246         Fixed a few other functions, including InterlockedCompareExchange()
247         which was miscompiled by gcc with optimizations enabled.
248
249 2005-04-13  Dick Porter  <dick@ximian.com>
250
251         * io.c (share_check): 
252         * handles.c (_wapi_handle_check_share): Refine the file check so
253         that sharing violations within the same process don't cause
254         assertion failures.
255
256 2005-04-13  Dick Porter  <dick@ximian.com>
257
258         * io.c (FindFirstFile): Fix bugs introduced with the merge (bug
259         74586)
260
261 2005-04-12  Dick Porter  <dick@ximian.com>
262         
263         The daemon-less io-layer.  Extensive lowlevel changes in
264         handles.c, requiring some corresponding changes in other files
265         calling these functions.  Private_foo structures have been
266         eliminated.
267
268         File descriptor handling differences account for most of the
269         changes in io.c and sockets.c.
270
271         Other highlights:
272         
273         * mutexes.c: Named mutexes are now a distinct type.
274         * atomic.h: Fix a PPC uninitialised variable warning.
275         * wait.c: Check conditions before waiting on a condition variable.
276         * processes.c: Handle process fork and wait without a daemon
277         (though this has the limitation of only being able to wait for
278         child processes.)
279
280 2005-04-07 Gonzalo Paniagua Javier <gonzalo@ximian.com>
281
282         * io-private.h:
283         * threads.c:
284         * threads.h:
285         * io.c:
286         * sockets.c:
287         * sockets.h: removed dead code that deals with async IO.
288
289 2005-03-30  Zoltan Varga  <vargaz@freemail.hu>
290
291         * atomic.c (InterlockedIncrement): Fix fallback implementation of
292         InterlockedIncrement and InterlockedDecrement. Fixes #74228.
293
294 2005-03-29  Sebastien Pouliot  <sebastien@ximian.com>
295
296         * io-layer.h: Add required header files for compiling with VS.NET.
297
298 2005-03-17 Miguel de Icaza <miguel@novell.com>
299
300         * io.c: don't fail on NFS when there are no more locks available.
301
302 2005-03-09  Dick Porter  <dick@ximian.com>
303
304         * error.c (_wapi_get_win32_file_error): ENFILE and EMFILE should
305         map to ERROR_TOO_MANY_OPEN_FILES, not ERROR_NO_MORE_FILES.  Fixes
306         bug 72671.
307
308 2005-03-09  Dick Porter  <dick@ximian.com>
309
310         * daemon.c (process_process_fork): Initialise the handle data
311         before using it in the error case.  This is probably the error
312         we're working around in the previous change.  Spotted by Taru Jain
313         <tjain@novell.com> and Hemanth Yamijala <YHemanth@novell.com>.
314
315 2005-03-07  Dick Porter  <dick@ximian.com>
316
317         * daemon.c: It looks like g_shell_parse_argv() can return
318         argv[0]=NULL somehow, yet still not give an error.  Make sure we
319         don't pass NULL to strrchr(), working around a segfault that
320         showed up on ZLM testing.
321
322 2005-03-01 Gonzalo Paniagua Javier <gonzalo@ximian.com>
323
324         * sockets.c: translate EINPROGRESS to EWOULDBLOCK in connect. This is
325         the expected error code showed by the test case in bug #73053.
326
327 2005-02-18 Gonzalo Paniagua Javier <gonzalo@ximian.com>
328
329         * io.c: another leftover.
330
331 Fri Feb 18 17:37:29 CET 2005 Paolo Molaro <lupus@ximian.com>
332
333         * io.c: fixed logic in checking errno in rev 40815.
334
335 Fri Feb 18 16:00:29 CET 2005 Paolo Molaro <lupus@ximian.com>
336
337         * threads.c: we don't depend on the GC checking tls
338         slots anymore.
339         * processes.c: remove unused ref to GC headers.
340
341 Thu Feb 17 19:57:11 CET 2005 Paolo Molaro <lupus@ximian.com>
342
343         * io.c: remove _wapi_thread_cur_apc_pending () checks
344         when the siscall should return immediatly and handle
345         the case when a syscall is interrupted without
346         erroring out, but returning a 0 read/write if possible.
347         Still the cases of read from file need to be handled.
348
349 Tue Feb 8 18:28:11 CET 2005 Paolo Molaro <lupus@ximian.com>
350
351         * threads.c: make people test with 1 MB stack per thread.
352
353 2005-01-17  Dick Porter  <dick@ximian.com>
354
355         * timefuncs.h: Make WapiFileTime endian-aware, as it's often
356         cast to and from 64bit ints.  Fixes bug 71213.
357
358 2005-01-11  Dick Porter  <dick@ximian.com>
359
360         * error.c (errno_to_WSA): Add EADDRNOTAVAIL error code
361         translation.
362
363 Mon Jan 10 16:15:19 EST 2005 Neale Ferguson <nealeferguson@earthlink.net>
364
365         * atomic.h: Fix functions on s390.
366
367 Mon Jan 10 20:30:19 CET 2005 Paolo Molaro <lupus@ximian.com>
368
369         * atomic.h: fix some functions on ppc (tests/interlocked.cs).
370
371 2005-01-10  Dick Porter  <dick@ximian.com>
372
373         * misc.c (_wapi_calc_timeout): Guard against overflow when
374         calculating timeouts.  This makes waiting with a large
375         (Int32.MaxValue) timeout not return immediately.
376
377 2004-12-23  Ben Maurer  <bmaurer@ximian.com>
378
379         * io.c (io_ops): make this `const' so it is shareable (well, only
380         really shareable if it is statically linked...)
381
382 Mon Dec 20 11:58:33 CET 2004 Paolo Molaro <lupus@ximian.com>
383
384         * threads.c, threads.h: add accessor to get the pthread_key_t for
385         a tls id.
386
387 2004-12-13 Gonzalo Paniagua Javier <gonzalo@ximian.com>
388
389         * io.c: check for the existence of 'dest' and set ERROR_ALREADY_EXISTS
390         if it exists and is not the same as 'src'.
391
392 2004-12-01 Neale Ferguson <Neale.Ferguson@SoftwareAG-usa.com>
393
394         * atomic.h : Fix InterlockedCompareExchange for s390/s390x.
395
396 2004-12-01 Gonzalo Paniagua Javier <gonzalo@ximian.com>
397
398         * processes.c: unquote the cmd path, allow for ' or " when quoting and
399         pass the quoted program name to the daemon, otherwise the call to
400         g_shell_unquote in the daemon will break things up.
401
402 2004-10-14  Dick Porter  <dick@ximian.com>
403
404         * sockets.c (_wapi_accept): Revert the previous change.  We now
405         set the accepted socket to have the same blocking status as the
406         listening socket in managed code.  This follows MS behaviour.
407         
408 2004-10-14  Dick Porter  <dick@ximian.com>
409
410         * sockets.c (_wapi_accept): On Darwin, make sure a newly
411         accept()ed socket is blocking.  Fixes bug 67355, patch by
412         grompf@sublimeintervention.com.
413
414 2004-10-04 Gonzalo Paniagua Javier <gonzalo@ximian.com>
415
416         * system.c: check the number of online processors instead of the
417         existing ones. Sanitize return value if it's an error.
418
419 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
420
421         * system.c: Add support for getting the # of cpus.
422
423 2004-09-28  Dick Porter  <dick@ximian.com>
424
425         * io.c (pipe_close_private): Fix one small typo in the last change
426         that totally hosed process creation with redirected pipes.
427
428 2004-09-24  Dick Porter  <dick@ximian.com>
429
430         * wapi-private.h: 
431         * sockets.c: 
432         * socket-private.h: 
433         * io.c: 
434         * io-private.h: 
435         * handles-private.h: Cope when a file descriptor is reused while
436         the handle that thought it owned it is still referenced, instead
437         of asserting.  Probably fixes bug 66479, though we've been unable
438         to reproduce it.
439
440 2004-09-09  Dick Porter  <dick@ximian.com>
441
442         * error.c:
443         * io.c: Set error codes everywhere.
444
445 2004-09-06  Dick Porter  <dick@ximian.com>
446
447         * handles.c (_wapi_handle_unref): Reset the private record's type
448         (CloseHandle): Check for a fd mapping failure, and return FALSE.
449         (_wapi_handle_process_fork): Fix long-standing bug in checking
450         handle return values.  Also do the required bookkeeping with the
451         new process's handles.
452
453         * daemon.c: When creating a new process's handles, check whether
454         the shared space needs to be increased
455
456 2004-09-05  Zoltan Varga  <vargaz@freemail.hu>
457
458         * shared.c (_wapi_shm_file): Fix leaking of filename.
459
460 2004-08-19  Dick Porter  <dick@ximian.com>
461
462         * handles.c (_wapi_handle_count_signalled_handles): Fix thinko
463         introduced with the fd offset stuff: unlock handles properly when
464         backing off.  Fixes the monologue hang at exit.
465
466 2004-08-18  Dick Porter  <dick@ximian.com>
467
468         * sockets.c: 
469         * io.c: Check that new fds fit in the table, return error if not
470
471         * daemon.c (_wapi_daemon_main): 
472         * handles.c (shared_init): Have all processes agree on a size for
473         the fd table.
474
475 2004-08-17  Dick Porter  <dick@ximian.com>
476
477         * daemon.c (process_new): 
478         * handles.c (_wapi_handle_new_internal): Cope when the space
479         reserved for file descriptors is larger than the shared segment
480         size.  Fixes the crash reported when running mono under gdb on
481         macosx.
482
483 2004-08-16  Dick Porter  <dick@ximian.com>
484
485         * sockets.c:
486         * io.c:
487         * handles-private.h (_wapi_handle_fd_offset_to_handle): Improve
488         error checking with passed-in file descriptors.
489
490 2004-08-11  Dick Porter  <dick@ximian.com>
491
492         * sockets.c: 
493         * io.c: Returned handle values are the file descriptor the handle
494         encapsulates
495
496         * handles.c: 
497         * handles-private.h: 
498         * daemon.c: Reserve the range of handles that can have the same
499         values as file descriptors.  These won't be used, but the values
500         will be used as file, console, pipe or socket handles.  The fd to
501         handle mapping is done internally and is invisible to users.
502         Fixes bug 61828.
503
504         * wapi-private.h (_WAPI_HANDLE_VERSION): Increment, because we now
505         reserve a chunk of handle space.
506
507 2004-08-04  Neale Ferguson <Neale.Ferguson@SoftwareAG-usa.com>
508
509         * atomic.h: add support for 64-bit S/390
510
511 2004-07-22  Dick Porter  <dick@ximian.com>
512
513         * timed-thread.c: 
514         * threads.c: Move the destruction of the internal thread data to
515         after the thread has been joined.  Fixes bug 61418.
516
517 2004-07-14  Dick Porter  <dick@ximian.com>
518
519         * wait.c (test_and_own): When not waiting for all handles to
520         become signalled, only own and return the lowest.  All the
521         documentation suggests that the old way was correct, but
522         experimentation shows it actually works like this.  Patch by
523         Sébastien Robitaille
524         (sebastien.robitaille@croesus.com), fixes bug 61511.
525
526 2004-07-09  Ben Maurer  <bmaurer@ximian.com>
527
528         * threads.c: register roots for gc
529
530 2004-07-08  Dick Porter  <dick@ximian.com>
531
532         * io.c (file_seek): If there is a high 32bit offset part, make
533         sure the low part isn't sign-extended.  Set error codes when
534         returning failure.  Fixes bug 61131.
535
536 2004-07-06  Dick Porter  <dick@ximian.com>
537
538         * io.c (file_setfiletime): Check for underflow when converting to
539         time_t values.  Set error codes when returning failure.  Fixes bug
540         60970.
541
542 2004-07-05  Dick Porter  <dick@ximian.com>
543
544         * mutexes.c (mutex_ops_init): Make the named mutex mutex sharable.
545
546         * daemon.c (unref_handle): Only destroy a handle if all processes
547         have released it, not just the current one.  Fixes bug 60887.
548
549 2004-06-30  Zoltan Varga  <vargaz@freemail.hu>
550
551         * mono-mutex.h atomic.h: Add G_GNUC_UNUSED to static inline functions
552         to prevent warnings.
553
554 2004-06-24  Dick Porter  <dick@ximian.com>
555
556         * mutexes.c: Indicate when a named mutex was reused
557
558 2004-06-24  Dick Porter  <dick@ximian.com>
559
560         * threads.c (SuspendThread): 
561         * timed-thread.c (_wapi_timed_thread_suspend): Wrap sem_wait in a
562         while loop.  See bug 58161.
563
564 Wed Jun 23 23:29:04 CEST 2004 Paolo Molaro <lupus@ximian.com>
565
566         * io.c: don't use sharemode for on-disk file permissions: it's used
567         for shared access to the open file.
568
569 2004-06-22  Dick Porter  <dick@ximian.com>
570
571         * events.c (CreateEvent): When creating an auto-reset event that
572         is initially owned, make sure the set count starts at 1.
573
574 2004-06-18  Dick Porter  <dick@ximian.com>
575
576         * event-private.h:
577         * events.c: Auto-reset events need to release one thread for each
578         time SetEvent() is called.  Fixes bug 41292.
579
580         * threads.h:
581         * mutex-private.h:
582         * mutexes.c: Scan for mutexes that are still locked by a thread
583         when it exits.  Fixes the MS demo app linked by bug 41292.
584
585         * wait.c (test_and_own): Make sure a handle is signalled before it
586         is owned.
587
588 2004-06-16  Dick Porter  <dick@ximian.com>
589
590         * timed-thread.c: Call the thread cleanup exit routine before taking
591         the join mutex, because this could deadlock if another thread tries
592         to join in the meantime.  This fixes the hang-at-exit problem seen
593         on macos.
594
595 2004-06-03  Lluis Sanchez Gual  <lluis@ximian.com>
596
597         * threads.c: Implemented SleepEx.
598         * threads.h: Fixed SleepEx signature.
599
600 2004-06-03  Miguel de Icaza  <miguel@ximian.com>
601
602         * threads.c: When running under valgrind, do not allocate too much
603         stack, as Valgrind default is 1 meg.
604
605 2004-05-27  Dick Porter  <dick@ximian.com>
606
607         * io.h:
608         * io.c: Implemented LockFile() and UnlockFile()
609
610 2004-05-21  Dick Porter  <dick@ximian.com>
611
612         * io.c (CreateFile): Check for existing share modes when opening
613         a file.
614
615         * handles.c: 
616         * handles-private.h: 
617         * daemon-messages.h: 
618         * daemon.c: Maintain a hash of file share modes, keying on device
619         and inode (to cope with symlinks.)
620
621 2004-05-20  Lluis Sanchez Gual  <lluis@ximian.com>
622
623         * daemon-messages.c: Retry if the communication with the daemon is
624           interrupted by a signal.
625         * io.c, sockets.c: Check for EINTR in every syscall that can be interrumped. 
626           Only return an error in this case if there is something in the apc queue
627           (which means that it is an interruption requested by the "user").
628         * processes.c: Use WaitForSingleObjectEx. No need to pass "alertable" as
629           true since the wait is small.
630         * shared.c: Retry write calls when interrumped by a signal.
631         * timed-thread.h, timed-thread.c: added _wapi_thread_apc_pending, which
632           returns TRUE if there are pending asynchronous calls (APC) for the
633           provided thread. Also added _wapi_thread_dispatch_apc_queue which calls
634           the enqueued APCs. Defined a new struct ApcInfo that holds information
635           about an enqueued APC.
636         * thread-private.h, threads.c: Implemented QueueUserAPC (which does the same
637           as in win32),_wapi_thread_apc_pending and _wapi_thread_dispatch_apc_queue. 
638           These last two methods call the corresponding apc methods in 
639           thread-private using the provided thread handle.
640         * threads.h: Added QueueUserAPC.
641         * uglify.h: Added WapiApcProc (needed by QueueUserAPC).
642         * wait.c, wait.h: Changed WaitForSingleObject to WaitForSingleObjectEx, and
643           WaitForMultipleObjects to WaitForMultipleObjectsEx. Implemented support
644           for APCs in those two methods and also in SleepEx.
645
646 2004-05-17  Dick Porter  <dick@ximian.com>
647
648         * io.c (CopyFile): Speed up.  Fixes bug 57859.
649
650 2004-05-13  Dick Porter  <dick@ximian.com>
651         * mono-mutex.c (mono_mutex_unlock): Return EPERM when the current
652         thread doesn't own the mutex, rather than assert()ing.
653
654 2004-05-11  Dick Porter  <dick@ximian.com>
655
656         * shared.c (_wapi_shm_attach): Cope when a previous daemon startup
657         attempt failed, leaving shared files that look like a daemon is
658         still starting.
659
660 2004-05-10  Gonzalo Paniagua Javier <gonzalo@ximian.com>
661
662         * io.c:
663         (SetFileAttributes): don't the the exec bit if the corresponding read
664         bit is not set.
665
666 2004-05-10  Zoltan Varga  <vargaz@freemail.hu>
667
668         * io.c (FindFirstFile): Fix invalid free.
669
670 2004-05-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
671
672         * io.c: translate from GFileError to errno codes and don't free
673         variables right after calling mono_io_scandir, as we may overwrite
674         errno value.
675
676 2004-05-08  Gonzalo Paniagua Javier <gonzalo@ximian.com>
677
678         * io.c: g_dir_open return ENOENT for directories on which we don't have
679         read/execute permission, while returning EPERM for anything below those.
680         So, change ENOENT by EPERM if the directory exists.
681
682 2004-05-07  Dick Porter  <dick@ximian.com>
683
684         * io.c (SetFileAttributes): Don't have failed chmod()s cause a
685         "file not found" error.  Fixes bug 54032.
686         
687 2004-05-07  Dick Porter  <dick@ximian.com>
688
689         * io.c (FindFirstFile): Comment out a windows-compatibility check
690         that breaks when directories have metachars in their names.
691         Workaround for bug 58116.
692
693 2004-05-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
694
695         * io.c: fixed for FindFirstFile for empty directories. Closes
696         bug #58147.
697
698 2004-05-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
699
700         * processes.c: set the start time for the current process. Fixes bug
701         #58109.
702
703 2004-05-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
704
705         * io-private.h: 'namelist' is now a gchar ** in _WapiHandlePrivate_find.
706         * io.c: implemented scandir using glib functions.
707
708 2004-05-04  Dick Porter  <dick@ximian.com>
709
710         * daemon.c (read_message): Return FALSE on error so the GSource
711         callback itself can return FALSE.  Cures the infinite loop poll()
712         warning on MacosX.
713         * shared.c: Fix some daemon startup race conditions.
714
715 2004-04-29  Miguel de Icaza  <miguel@ximian.com>
716
717         * io.c (CopyFile): Use 32k buffers to copy the file instead of 2k,
718         use the stack, do not use dynamic memory.
719
720 2004-04-29  Zoltan Varga  <vargaz@freemail.hu>
721
722         * io.c: Add scandir implementation for platforms which do not have
723         it, like solaris.
724
725 2004-04-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
726
727         * io.[ch]: implemented GetLogicalDriveStrings.
728
729 2004-04-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
730
731         * io.c:
732         * sockets.c: use the field name from configure when accessing sigval
733         pointer field. Makes this work on the Mac.
734
735 2004-04-28  Bernie Solomon  <bernard@ugsolutions.com>
736
737         * atomic.c: (InterlockedExchange) fix typo for
738         mutex name
739
740 2004-04-28  Gonzalo Paniagua Javier <gonzalo@ximian.com>
741
742         * io.c:
743         * sockets.c: added check for sys/aio.h.
744
745 2004-04-28  Gonzalo Paniagua Javier <gonzalo@ximian.com>
746
747         * error.[ch]: added _wapi_get_win32_file_error...
748         * io.c: ... which was _wapi_get_win32_error here.
749         * sockets.c: rename the function calls here too.
750
751 2004-04-28  Dick Porter  <dick@ximian.com>
752
753         * daemon-messages.c: Avoid a deadlock when a thread is killed while
754         waiting for the daemon by using a recursive mutex.  Helps bug 56699.
755
756 2004-04-28  Gonzalo Paniagua Javier <gonzalo@ximian.com>
757
758         * io.c: fixed leak in async_notifier().
759
760         * sockets.[ch]: added AIO support for sockets and fixed WSAIoctl
761         declaration.
762
763         * threads.c: removed old comment.
764
765 2004-04-26  David Waite  <mass@akuma.org>
766
767         * daemon-messages.h:
768         * daemon-private.h
769         * error.h:
770         * io.h:
771         * processes.h:
772         * shared.h:
773         * thread-private.h:
774         * wapi-private.h: remove comma from end of enumeration declarations
775         * status.h: cast unsigned int types to int for enum assignment
776
777 2004-04-26 David Waite <mass@akuma.org>
778
779         * io.c:
780         * timefuncs.c: declare 64-bit constants as long long types (i.e.
781         10ULL)
782
783 2004-04-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
784
785         * socket-wrappers.h: _wapi_socket == WSASocket now. Added
786         WSA_FLAG_OVERLAPPED.
787
788         * sockets.c: new unused parameters for _wapi_socket.
789
790 2004-04-22  Miguel de Icaza  <miguel@ximian.com>
791
792         * timed-thread.c: Replace sem_init with MONO_SEM_INIT to handle
793         the fact that MacOS X is a piece of junk (sem_init is *defined* in
794         the libc, but they return `not implemented'). 
795
796 2004-04-22  Dick Porter  <dick@ximian.com>
797
798         * handles.c: 
799         * handles-private.h: Reference the handle when it is locked, so
800         that another thread can't blow it away while we're waiting for it
801         to become signalled.
802         
803         * wait.c: 
804         * timed-thread.c: 
805         * threads.c: 
806         * sockets.c: 
807         * semaphores.c: 
808         * mutexes.c: 
809         * mono-mutex.c: 
810         * io.c: 
811         * handles.c: 
812         * handles-private.h: 
813         * events.c: 
814         * error.c: 
815         * daemon-messages.c: 
816         * critical-sections.c: 
817         * atomic.c: Added pthreads cleanup handlers and error asserts
818
819         * shared.c: 
820         * handles.c: Fixed the gcc "variable might be used uninitialised"
821         warnings.  They can't happen, but gcc doesn't know that
822         g_assert()s don't return.
823
824         Fixed the declaration of _wapi_handle_process_kill() so that it
825         expects the correct type for the pid.
826         
827         * threads.c: Removed the TLS_PTHREAD_MUTEX style locking that
828         hasn't been used in ages and just made the code more complex.
829
830 2004-04-17  Zoltan Varga  <vargaz@freemail.hu>
831
832         * processes.c: Include <signal.h> for SIGKILL and SIGILL + fix some
833         warnings. Fixes #57168.
834
835 2004-04-16  Dick Porter  <dick@ximian.com>
836
837         * threads.c (Sleep): Using div(3) with a negative (when signed)
838         numerator causes the quotient to be 0 and the remainder to be the
839         numerator.  This feeds a small negative value to nanosleep(3),
840         which will return immediately and cause a busy wait.  Fixes bug
841         56351.
842
843 2004-04-15  Dick Porter  <dick@ximian.com>
844
845         * io-private.h:
846         * io.c: Rewrite FindFirstFile and FindNextFile using scandir(3)
847         and fnmatch(3) instead of glob(3).  glob() can't cope with being
848         given filenames containing metachars.  This fixes bug 40557.
849
850 2004-04-14  Bernie Solomon  <bernard@ugsolutions.com>
851
852         * security.c: #warning is a GCC-ism
853
854 2004-04-13  Sebastien Pouliot  <sebastien@ximian.com>
855
856         * security.c: Removed GetUserName as glib g_get_user_name does a
857         better (portability) job. Added ImpersonateLoggedOnUser and
858         RevertToSelf.
859
860 2004-04-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
861
862         * mono-mutex.h: move pthread_mutex_timedlock declaration to...
863         * mono-mutex.c: ...here. It was causing a warning that prevented
864         libgdiplus compilation.
865
866 2004-04-04  Miguel de Icaza  <miguel@ximian.com>
867
868         * security.c (GetUserName): Make it work on MacOS X
869
870 2004-04-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
871
872         * security.c: use getpwuid_r if available. This one is thread-safe.
873
874 2004-04-02  Sebastien Pouliot  <sebastien@ximian.com>
875
876         * Makefile.am: Added security.c|h.
877         * security.c: New file for security related functions. Added function
878         GetUserName to fix #56144.
879         * security.h: New. Header file for security.c
880         * wapi.h: Added include for security.h
881
882 2004-03-25  Gonzalo Paniagua Javier <gonzalo@ximian.com>
883
884         * daemon-messages.h: added kill structs.
885
886         * daemon.c: implemented process_process_kill.
887         * handles-private.h:  define process_process_kill.
888         * handles.c: implemented _wapi_handle_process_kill.
889         * processes.[ch]: implemented TerminateProcess.
890
891 2004-03-25  Bernie Solomon  <bernard@ugsolutions.com>
892
893         * daemon.c (rem_fd): On solaris you seem to get an
894         error even after removing the input source so don't
895         try and rem_fd it twice.
896
897 2004-03-25  Lluis Sanchez Gual  <lluis@ximian.com>
898
899         * daemon.c: in process_post_mortem, If the child terminated due to the 
900         receipt of a signal, the exit status must be based on WTERMSIG, since 
901         WEXITSTATUS returns 0 in this case.
902
903 2004-03-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
904
905         * daemon.c: turned a warning into a DEBUG statement. Now we may hit it.
906
907 2004-03-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
908
909         * daemon.c: only call getdtablesize () once.
910         * processes.c: wait 500 ms to check if execve failed and throw the same
911         exception as MS on failure. Fixes bug #32809.
912
913 2004-03-17  Bernie Solomon  <bernard@ugsolutions.com>
914
915         * io.c (async_notifier): use "union sigval" rather
916         than sigval_t as Solaris doesn't have sigval_t
917         (which isn't in IEEE 1003.1 either).
918
919 2004-03-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
920
921         * io.c: added debug stuff and removed a few redundant lines in
922         file_write.
923
924 2004-03-15  Gonzalo Paniagua Javier <gonzalo@ximian.com>
925
926         * io-private.h: added new fields for file structure. Declare
927         _wapi_io_add_callback.
928
929         * io.c: added _wapi_get_win32_error, support aio_read/write in
930         file_read/write. Implemented _wapi_io_add_callback, which is where
931         BindHandle ends up.
932         
933         * io.h: added new fields for WapiOverlapped and typedef for the
934         callback.
935
936         * processes.c: fixed off-by-one bug when handling environment variables 
937         passed in.
938
939         * threads.[ch]: implemented BindIoCompletionCallback.
940
941         * uglify.h: added typedef for LPOVERLAPPED_COMPLETION_ROUTINE.
942
943 2004-03-14  Zoltan Varga  <vargaz@freemail.hu>
944
945         * socket-wrappers.h: Remove extra semicolon.
946
947 2004-03-03  Dave Camp  <dave@ximian.com>
948
949         * daemon.c: (add_fd), (fd_activity), (_wapi_daemon_main):
950         Use a new main context.
951
952 2004-03-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
953
954         * io.c:
955         (GetFileAttributes): set the error depending on errno instead of
956         setting ERROR_FILE_NOT_FOUND always. See bug #55160.
957
958 2004-03-01  Gonzalo Paniagua Javier <gonzalo@ximian.com>
959
960         * io.c:
961         (CopyFile): free the buffer on error.
962         * sockets.c:
963         (WSAIoctl): free the buffer on error.
964
965 2004-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
966
967         * error.c: fixed mapping for EPROTONOSUPPORT and ESOCKTNOSUPPORT.
968
969         * sockets.[ch]: retry creating the socket for AF_INET, SOCK_RAW
970         using IP protocol with IP over IP. Implemented WSAIoctl UNIX-style.
971
972 2004-01-27  Bernie Solomon  <bernard@ugsolutions.com>
973
974         * shared.c (_wapi_shm_file): add hostname
975         to shared data file names to handle NFS mounted
976         .wapi directories.
977
978 Mon Jan 26 16:15:03 CET 2004 Paolo Molaro <lupus@ximian.com>
979
980         * sockets.h: remove obsolete soklen_t typedef.
981
982 Fri Jan 23 21:07:02 CET 2004 Paolo Molaro <lupus@ximian.com>
983
984         * socket-wrappers.h, sockets.h, sockets.c, Makefile.am: move socket
985         wrappers to its own non-installed header file.
986
987 2004-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
988
989         * io.c:
990         (FindFirstFile): unlock the handle if FindNextFile fails.
991         (FindNextFile): g_free a couple of pointers before retrying.
992
993         * wait.c:
994         (WaitForMultipleObjects): if only one handle provided, use
995         WaitForSingleObject.
996
997 2003-12-22  Bernie Solomon  <bernard@ugsolutions.com>
998
999         * handles-private.h: (_wapi_handle_type) check
1000         for segment in range before using it
1001
1002 2003-12-22  Bernie Solomon  <bernard@ugsolutions.com>
1003
1004         * thread-private.h: _wapi_thread_ops is now const
1005         must match .c file.
1006
1007 Mon Dec 22 18:29:03 CET 2003 Paolo Molaro <lupus@ximian.com>
1008
1009         * threads.c, timed-thread.c, timed-thread.h: use mach
1010         semaphores on Darwin (MacOSX) since the posix ones
1011         are mostly broken there (threads are not created suspended
1012         and they can start executing before they are fully initialized
1013         like in tests/thread-static.cs).
1014
1015 Mon Dec 22 17:18:45 CET 2003 Paolo Molaro <lupus@ximian.com>
1016
1017         * atomic.h: ppc fixes.
1018
1019 2003-12-19  Bernie Solomon  <bernard@ugsolutions.com>
1020
1021         * handles.c: remove my bad use of MONO_ZERO_ARRAY_LENGTH
1022         in HDRSIZE 
1023
1024 2003-12-15  Bernie Solomon  <bernard@ugsolutions.com>
1025
1026         * shared.c: (_wapi_shm_open) make scratch file
1027         not have to immediately regrow to avoid remaps
1028         (HPUX can't cope with these).
1029         (_wapi_shm_attach) use actual size of file
1030         to set scratch data_len for the creating process.
1031
1032         * handles.c: (_wapi_handle_new_internal) make
1033         sure mutex & cond var are initialized even for
1034         non process shared ones. 
1035         (_wapi_handle_unref) always call destroy 
1036         routines on mutex & cond var
1037
1038 2003-12-15  Bernie Solomon  <bernard@ugsolutions.com>
1039
1040         * daemon.c: change channel data structure so
1041         input sources are removed from glib event loop
1042         properly. xsp works better on Solaris and 
1043         fixes #51278
1044
1045 2003-12-12  Bernie Solomon  <bernard@ugsolutions.com>
1046
1047         * wapi-private.h: Replace G_GNUC_PRETTY_FUNCTION
1048         definition with file & line number for non-GCC
1049         compiles.
1050
1051 2003-12-08  Bernie Solomon  <bernard@ugsolutions.com>
1052
1053         * Makefile.am: make sure hppa_atomic.s is in distribution
1054
1055 2003-12-01  Dick Porter  <dick@ximian.com>
1056
1057         * wapi-private.h: 
1058         * mutexes.c (CreateMutex): 
1059         * mutex-private.h (struct _WapiHandle_mutex): 
1060         * handles.c: Look up certain handle types by name, in a shared
1061         namespace.  Currently only mutex handles have this implemented.
1062         Fixes bug 51089.
1063
1064         * semaphores.c (CreateSemaphore): 
1065         * events.c (CreateEvent): Fix signature
1066
1067 2003-11-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1068
1069         * io.c: don't call g_free before testing errno as it may modify it.
1070         If the path exists, return an error if it's not a directory. Fixes
1071         bug #50753.
1072
1073 2003-11-20  Dick Porter  <dick@ximian.com>
1074
1075         * io.c: Missed a little-endian UTF16 conversion.  Patch from
1076         Jeroen Zwartepoorte (Jeroen@xs4all.nl), fixes bug 51065.
1077
1078 2003-10-29  Dick Porter  <dick@ximian.com>
1079
1080         * io.c (MoveFile): If the move crosses filesystems, try and fall
1081         back to copy and delete.  Patch from Jörg Rosenkranz
1082         (JoergR@voelcker.com), fixes bug 50298.
1083
1084 2003-10-28  Dick Porter  <dick@ximian.com>
1085
1086         * io.c: Use the new encoding conversion to cope with non-utf8
1087         locales in filenames.
1088
1089         * processes.c: Ditto for process arguments.
1090
1091 Tue Oct 21 12:01:14 CEST 2003 Paolo Molaro <lupus@ximian.com>
1092
1093         * atomic.h: some ppc inline asm fixes (incorrect use of labels, 
1094         incorrect register constraints, incorrect clobber lists).
1095
1096 2003-10-13  Bernie Solomon  <bernard@ugsolutions.com>
1097
1098         * Makefile.am hppa_atomic.s: add HP 64bit
1099         implementation of atomic ops
1100
1101 2003-10-13  Zoltan Varga  <vargaz@freemail.hu>
1102
1103         * threads.c (CreateThread): Wrap pthread_attr_setstacksize call in
1104         a conditional for platforms that don't have it.
1105
1106 2003-10-09  Bernie Solomon  <bernard@ugsolutions.com>
1107
1108         * threads.c: (CreateThread) use stacksize argument
1109         if non-zero - change default for 64 bits to 4Mb
1110
1111 2003-09-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1112
1113         * sockets.c: set last error when socket creation fails. This shed some
1114         light on bug #49015.
1115
1116 2003-09-28  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1117
1118         * processes.c: fixed bug #48973: we only change \ by / for the argument
1119         to be used as command.
1120         When getting the program name from the args, don't let the space between
1121         them in the args.
1122
1123 2003-09-24  Bernie Solomon <bernard@ugsolutions.com>
1124
1125         * atomic.h atomic.c: fix sparc so lock is
1126         global, increment does so and it compiles under Sun compiler.
1127
1128 2003-09-22  Bernie Solomon <bernard@ugsolutions.com>
1129
1130         * handles.c: include <string.h> directly as may
1131         not be nested in <sys/un.h> like Linux
1132
1133 2003-09-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1134
1135         * io.c:
1136         (DeleteFile): call SetLastError on failure. Fix by
1137         richard.torkar@htu.se (Richard Torkar). Closes bug #48222.
1138
1139 2003-09-15  Lluis Sanchez Gual  <lluis@ximian.com>
1140
1141         * daemon.c: In compare_process(), discard handles already signalled.
1142
1143 2003-09-02  Dick Porter  <dick@ximian.com>
1144
1145         * io.c: Work around glib brain-dead assumptions about utf8-encoded
1146         filenames.  Fixes bug 30781.
1147
1148 2003-08-28  Dick Porter  <dick@ximian.com>
1149
1150         * critical-sections.c:  Patch from Bernie Solomon
1151         <bernard@ugsolutions.com> to emit a warning if locking a critical
1152         section fails.
1153
1154 2003-07-23  Dick Porter  <dick@ximian.com>
1155
1156         * shared.c:
1157         * daemon.c (maybe_exit): Avoid the race condition when the daemon is
1158         closing but another client comes along when the shared data is still
1159         visible.  Should fix bugs 33671 and 35213.
1160
1161 2003-07-23  Dick Porter  <dick@ximian.com>
1162
1163         * handles.c:  Initialise handle mutex and cond.  Fix by
1164         Bernie Solomon <bernard@ugsolutions.com>
1165
1166 2003-07-15  Dick Porter  <dick@ximian.com>
1167
1168         * timed-thread.c (timed_thread_start_routine): Fix virtual memory
1169         leak when threads quit.  Fixes bug 44067.
1170
1171 Wed Jun 18 19:08:40 CEST 2003 Paolo Molaro <lupus@ximian.com>
1172
1173         * io.c: never add write permission for group or others in
1174         SetFileAttributes ().
1175
1176 2003-06-17  Dick Porter  <dick@ximian.com>
1177
1178         * io.c (SetFileAttributes): Implement the ReadOnly attribute, and
1179         ignore the unsupported ones ("fixes" bug 44977).
1180
1181 2003-06-17  Lluis Sanchez Gual  <lluis@ximian.com>
1182
1183         * misc.c: fix bug in _wapi_calc_timeout. It gave wrong values for
1184           high ms values (there was an overflow).
1185
1186 2003-06-17  Zoltan Varga  <vargaz@freemail.hu>
1187
1188         * system.h (struct _WapiSystemInfo ): Fix warnings when using gcc-3.3.
1189
1190 2003-06-11  Dick Porter  <dick@ximian.com>
1191
1192         * shared.c: Fix shared directory creation.  Patch from
1193         Pablo Baena <pbaena@uol.com.ar>
1194
1195 2003-06-10  Dick Porter  <dick@ximian.com>
1196
1197         * atomic.c: Delete the useless compile warning
1198
1199 2003-06-09  Dick Porter  <dick@ximian.com>
1200
1201         * daemon.c: Lookup env as a string array.  Fixes bug 44289.  Also
1202         make setting the process handle value in the environment actually
1203         work.
1204
1205         * processes.c: Pretty up the process name, if it happens to be
1206         "mono" such as when another mono process forks "mono foo.exe"
1207
1208 2003-06-05  Dick Porter  <dick@ximian.com>
1209
1210         * processes.c (process_set_current): Don't do an expensive handle
1211         search at application startup, check the environment to see if the
1212         process handle has already been created.
1213
1214         * io.c: Don't do an expensive handle search when creating stdin,
1215         stdout and stderr handles, just create them all the first time one
1216         is requested.
1217
1218         * wapi-private.h:
1219         * shared.c:
1220         * shared.h:
1221         * handles.c:
1222         * handles-private.h:
1223         * daemon-messages.h:
1224         * daemon-private.h:
1225         * daemon.c: Support for "unlimited" number of handles and scratch
1226         data.
1227
1228         Speed up application startup by passing process handle in the
1229         environment, rather than let the app scan all handles (which gets
1230         really slow when there are more than a few thousand to check.)
1231
1232         Initialise some structs passed to syscalls, noticed by valgrind.
1233         
1234
1235 2003-05-20  Dick Porter  <dick@ximian.com>
1236
1237         * io.c (FindFirstFile): Include . files in the glob.  Fixes bug
1238         43229.
1239
1240 2003-05-19  Dick Porter  <dick@ximian.com>
1241
1242         * threads.c: Set the new thread's stack size to 2M.  Fix needed
1243         for BSD, reported by Martin Dvorak <md@9ll.cz>
1244
1245 2003-05-16  Dick Porter  <dick@ximian.com>
1246
1247         * io.h:
1248         * io.c: Implement GetTempPath()
1249
1250 2003-05-16  Dick Porter  <dick@ximian.com>
1251
1252         * processes.c (CreateProcess): Set some error codes
1253
1254 2003-05-12  Dick Porter  <dick@ximian.com>
1255
1256         * misc.c (_wapi_calc_timeout): Cope with overflowing tv_nsec.
1257         Patch from Martin Dvorak <mdvorak@ninell.cz>.
1258
1259 2003-05-10  Dick Porter  <dick@ximian.com>
1260
1261         * io.c (CopyFile): Copy file mode as well as file data.  Based on
1262         suggestion by Giuseppe Greco <giuseppe.greco@agamura.com>, bug
1263         42706.
1264
1265 2003-05-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1266
1267         * handles.c: don't call GC_gcollect when creating new handles.
1268
1269 2003-05-05  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1270
1271         * handles.c: added some debugging code. Call GC_gcollect
1272         before creating a new handle. It makes Lupus' test run smoother and
1273         faster (from 62 to 83 request per second). Notice that calling
1274         GC_finalizer_notifier if needed (GC_should_invoke_finalizer ()) does
1275         not improve nor degrade the performance, so i don't do it.
1276
1277 2003-05-02  Dick Porter  <dick@ximian.com>
1278
1279         * sockets.c: Rearrange closesocket() and socket_close_private(),
1280         and remember to unref the handle, so we don't leak socket handles.
1281         Fix from Pelle Johnsen <pelle.johnsen@mail.dk>
1282
1283 2003-04-11  Dick Porter  <dick@ximian.com>
1284
1285         * atomic.h: ARM atomic operations by Malte Hildingson
1286         <tds00mahi@tellus.thn.htu.se>
1287
1288 Tue Apr 8 11:37:29 CEST 2003 Paolo Molaro <lupus@ximian.com>
1289
1290         * atomic.h: fix macosx build by "Urs C. Muff" <umuff@quark.com>.
1291
1292 2003-04-03  Martin Baulig  <martin@ximian.com>
1293
1294         The following change is conditional to `WITH_INCLUDED_LIBGC'
1295         which is not yet enabled by default.
1296
1297         * threads.c (SuspendThread, ResumeThread): Fully implemented this.
1298         (gc_init): New static function; install a signal handler for
1299         SIGPWR which is used to suspend threads.  [FIXME: it SIGPWR
1300         doesn't exist on all Unix systems, we need to find another
1301         signal].
1302         (mono_wapi_push_thread_stack): New public function.  Tells the
1303         garbage collector about the current stack pointer of a suspended
1304         thread.
1305
1306 2003-04-03  Martin Baulig  <martin@ximian.com>
1307
1308         * timed-thread.h (TimedThread): Added `suspended_sem',
1309         `suspend_count' and `stack_ptr'.
1310
1311 2003-03-28  Dick Porter  <dick@ximian.com>
1312
1313         * atomic.h: PPC support gratiously donated to the public domain
1314         by John Duncan <jddst19@mac.com>
1315
1316 2003-03-20  Dick Porter  <dick@ximian.com>
1317
1318         * sockets.c (_wapi_connect): If connect() fails with EACCES, try
1319         setting SO_BROADCAST and connecting again.  Fixes bug 39178.
1320
1321 2003-03-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1322
1323         * processes.c: included Jerome Laban's patch and call SetLastError when
1324         the executable is not found.
1325
1326 2003-03-03  Dick Porter  <dick@ximian.com>
1327
1328         * io.c (CreateFile): Try opening directories readonly, so that
1329         timestamps can be adjusted.  Patch by Elan Feingold
1330         <efeingold@mn.rr.com>.
1331
1332 2003-02-25  Dick Porter  <dick@ximian.com>
1333
1334         * shared.c (_wapi_shm_attach): Return a failure code on system
1335         call errors, rather than exiting.
1336
1337 2003-02-21  Dick Porter  <dick@ximian.com>
1338
1339         * processes.c (GetCurrentProcessId): Use the current process
1340         handle to return the process ID, as getpid() is unreliable
1341         (linuxthreads gives each thread a different pid).  Fixes bug
1342         37550.
1343
1344 2003-02-21  Dick Porter  <dick@ximian.com>
1345
1346         * io.c (FindNextFile): Skip over dangling symlinks.  Fixes bug
1347         34076.
1348
1349 2003-02-11  Dick Porter  <dick@ximian.com>
1350
1351         * timefuncs.h: 
1352         * timefuncs.c: Added GetTickCount()
1353
1354 2003-02-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1355
1356         * error.c: added WSA_EHOSTUNREACH mapping.
1357
1358 2003-01-26  Miguel de Icaza  <miguel@ximian.com>
1359
1360         * io.c (SetFileAttributes): This routine is not currently
1361         implemented for the general case, but I added a special case to
1362         set the executable bit on Linux.
1363
1364 Wed Jan 15 15:55:40 CET 2003 Paolo Molaro <lupus@ximian.com>
1365
1366         * sockets.h, daemon.c, io.c: compilation fixes on MacOSX.
1367
1368 2003-01-08  Dick Porter  <dick@ximian.com>
1369
1370         * sockets.c: Fixed setting blocking mode to true (fixes bug 36388)
1371
1372 2002-12-11  Juli Mallett  <jmallett@FreeBSD.org>
1373
1374         * daemon.c, handles-private.h, handles.c, wapi-private.h:
1375         Check for an implementation which says it supports
1376         _POSIX_THREAD_PROCESS_SHARED, rather than just one that
1377         defines the symbol.  Defined but with a value of -1 still
1378         means that it is unsupported.
1379
1380 2002-12-08  Martin Baulig  <martin@ximian.com>
1381
1382         * handles.c (_wapi_handle_new): Create new non-shared handles with
1383         an initial refcount of 1, not 0.
1384
1385 2002-11-22  Dietmar Maurer  <dietmar@ximian.com>
1386
1387         * threads.c (TlsGetValue): removed unnecessary mutex
1388
1389 2002-11-20  Dick Porter  <dick@ximian.com>
1390
1391         * timed-thread.c (_wapi_timed_thread_attach): Attached threads
1392         need to store their data structure too.
1393
1394         * threads.c: Make sure the threading data is initialised wherever
1395         it is needed
1396
1397 2002-11-15  Dick Porter  <dick@ximian.com>
1398
1399         * timed-thread.c: Removed unneeded parameters in
1400         _wapi_timed_thread_attach().
1401
1402         * threads.c: Renamed AttachThread() to make it not look like
1403         external API.  Removed unneeded parameters.
1404
1405 2002-11-11  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1406
1407         * error.[ch]: added errno_to_WSA (). It displays a warning and return
1408         WSASYSCALLFAILURE if there is no error mapping for the given errno,
1409
1410         * sockets.c: use errno_to_WSA and fixed display of warning for h_errno.
1411
1412 2002-10-31  Dick Porter  <dick@ximian.com>
1413
1414         * io.h: 
1415         * io.c: Define and use INVALID_FILE_ATTRIBUTES
1416
1417 2002-10-07  Dick Porter  <dick@ximian.com>
1418
1419         * timefuncs.c:
1420         * daemon.c: Use a more accurate time source for process start and
1421         end times.
1422
1423 2002-10-03  Dick Porter  <dick@ximian.com>
1424
1425         * daemon.c:
1426         * handles.c:
1427         * threads.c:  Fixes for freebsd.  Make sure that mutex and condition
1428         creation and deletion happen in the process that owns them, when
1429         POSIX shared thread objects aren't supported.  This breaks on
1430         freebsd, as pthread_t is a pointer to data.
1431
1432 2002-10-02  Dick Porter  <dick@ximian.com>
1433
1434         * shared.c: Use mmap() instead of sysv shm for the shared data.
1435
1436         * wapi-private.h (_WAPI_HANDLE_VERSION): Reset back to 0, for the
1437         new system
1438
1439         * daemon-private.h: 
1440         * daemon.c: mmap()ed regions survive fork, so just pass the
1441         pointer to _wapi_daemon_main instead of mapping it again.
1442
1443 2002-10-01  Dick Porter  <dick@ximian.com>
1444
1445         * timed-thread.c: Kludge for CREATE_SUSPENDED thread creation.
1446         Unfortunately libgc uses the same thread suspend technique that I
1447         want to, and the two don't mix: libgc will deadlock when it tries
1448         to stop the world if a thread has already been suspended by
1449         someone else.  Just do the simple suspended create rather than the
1450         general purpose thread suspension for now.
1451
1452         * threads.c: Pass create flags to the timed_thread create call, to
1453         implement suspended thread creation.  ResumeThread() partially
1454         implemented, to cope with the case where a newly created but
1455         suspended thread is launched.
1456
1457 2002-09-30  Dick Porter  <dick@ximian.com>
1458
1459         * sockets.c (ioctlsocket): Set non-blocking mode in a better way,
1460         with fcntl.
1461
1462 2002-09-27  Dick Porter  <dick@ximian.com>
1463
1464         * semaphores.c: Only include semaphore.h if it's present. Patch
1465         for BSD from jmmv@hispabsd.org (Julio Merino).
1466
1467 2002-09-27  Dick Porter  <dick@ximian.com>
1468
1469         * processes.c: Pass environment and working directory to the
1470         daemon when forking.  Don't let argv[0] be duplicated when looking
1471         for the program name.  Implement EnumProcessModules (simple
1472         version for now, lsof-style later if needed), GetModuleBaseName,
1473         {Get,Set}ProcessWorkingSetSize (just faked, because the vm hints
1474         aren't available on Linux).
1475
1476         * process-private.h: Store the process name, and the working set
1477         min and max
1478
1479         * handles.c:
1480         * handles-private.h: New functions to store and retrieve an array
1481         of strings in the scratch space
1482
1483         * daemon.c: Don't miss deleting some handles when a client exits
1484         (we used to rely on the client doing the final cleanup, but
1485         obviously if the client is no longer there the daemon has to do
1486         it).
1487
1488         Process forking now sets the environment and the working
1489         directory.
1490
1491         * io.c: Don't confuse fd 0 with an unassigned handle struct
1492
1493         * atomic.h: Add a google cache alternative to the msdn URL
1494
1495 2002-09-25  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1496
1497         * sockets.c:
1498         (_wapi_recvfrom): added ECONNRESET to the switch.
1499
1500 2002-09-24  Mark Crichton  <crichton@gimp.org>
1501
1502         * atomic.h: Yea.  On linux, sparc isn't sparc, it's __sparc__.
1503         Added to ifdef.
1504
1505 2002-09-19  Mark Crichton  <crichton@gimp.org>
1506
1507         * daemon.c, shared.c: Added NEED_LINK_UNLINK for systems that
1508         dont have Linux's abstract filesystem for sockets.
1509
1510 2002-09-19  Mark Crichton  <crichton@gimp.org>
1511
1512         * atomic.h: Added SPARC atomic asm code.
1513         * daemon.c, handles-private.h, handles.c, wapi-private.h:
1514         undefined _POSIX_THREAD_PROCESS_SHARED.  This actually exists on
1515         Solaris 9, however, the code paths don't seem to work.  More testing
1516         on the shared case is *really* needed.
1517
1518 2002-09-03  Dick Porter  <dick@ximian.com>
1519
1520         * threads.h: 
1521         * threads.c: Removed PosixKillThread(), because it's not in the
1522         w32 api
1523
1524 2002-08-20  Dick Porter  <dick@ximian.com>
1525
1526         * handles.c (_wapi_handle_scratch_store): Made stored byte lengths
1527         multiples of 4 bytes, to keep header structures aligned.  Needed
1528         for sparc, at least. (Patch from crichton@gimp.org)
1529
1530         * handles.c: Removed 'disable_shm' variable (we've defaulted to
1531         building with shm enabled for months now)
1532
1533 2002-08-19  Dick Porter  <dick@ximian.com>
1534
1535         * daemon.c: Rewrote the poll() loop to use GIOChannels instead,
1536         for legacy NeXT-based systems.
1537
1538 2002-08-12  Dick Porter  <dick@ximian.com>
1539
1540         * atomic.h: Rename some parameters to avoid c++ keywords (Patch
1541         from Joseph Wenninger <kde@jowenn.at>)
1542
1543 2002-08-05  Dietmar Maurer  <dietmar@ximian.com>
1544
1545         * threads.c: use fast spinlocks by default
1546
1547 2002-08-02  Dick Porter  <dick@ximian.com>
1548
1549         * io.c (GetStdHandle): Add a handle reference when returning a
1550         duplicate console handle.  This fixes the unref_handle errors in
1551         NUnit.
1552
1553 2002-08-01  Dietmar Maurer  <dietmar@ximian.com>
1554
1555         * threads.c (TLS_PTHREAD_MUTEX): define this because else some
1556         tests does not work
1557
1558 2002-08-01  Dick Porter  <dick@ximian.com>
1559
1560         * threads.c: Use atomic spinlocks in TLS functions
1561
1562         * mono-spinlock.h:
1563         * Makefile.am: Added mono-spinlock.h
1564
1565 2002-07-21  Jeffrey Stedfast  <fejj@ximian.com>
1566
1567         * daemon-messages.c: #include <sys/types.h> and <sys/sockets.h> -
1568         these are needed for sendmsg() and also for struct msghdr (at
1569         least on Solaris). Solaris still won't build because struct msghdr
1570         doesn't have msg_flags, msg_control, or msg_controllen members.
1571         (CMSG_SPACE): Define for systems that don't have it.
1572         (CMSG_LEN): Same.
1573
1574 2002-07-20  Dick Porter  <dick@ximian.com>
1575
1576         * wapi-private.h:
1577         * io-private.h:
1578         * io.h:
1579         * io.c:
1580         * handles.c: Implemented pipe handles
1581         
1582         * handles.c:
1583         * daemon.c: Fixed bug in handle closing.
1584
1585         * shared.c:
1586         * daemon.c: Forked processes now close all open file descriptors.
1587
1588 Fri Jul 19 19:05:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
1589
1590         * sockets.h, io-layer.h, critical-sections.h: don't include config.h
1591         in header files.
1592
1593 2002-07-19  Martin Baulig  <martin@gnome.org>
1594
1595         * threads.c (ExitThread): Call exit() if no threads has been
1596         created yet.
1597
1598 2002-07-17  Dick Porter  <dick@ximian.com>
1599
1600         * daemon-messages.c: Freebsd fixes from Andreas Kohn
1601         <andreas.kohn@gmx.net>
1602
1603 2002-07-15  Dick Porter  <dick@ximian.com>
1604
1605         * io.c: Removed bogus console_flush() method, that was just cut
1606         and pasted from file_flush when I separated the two handle types.
1607
1608 2002-07-12  Dick Porter  <dick@ximian.com>
1609
1610         * io.c (convert_from_flags): Fixed misunderstanding wrt fcntl
1611         flags.  Fixes bug 27633.
1612
1613 2002-07-12  Dick Porter  <dick@ximian.com>
1614
1615         * wapi-private.h:
1616         * handles.c:
1617         * daemon.c: Use size of sockaddr_un.sun_path from config.h
1618
1619 2002-07-12  Dick Porter  <dick@ximian.com>
1620
1621         * processes.c (CreateProcess): Send stdin, stdout and stderr
1622         handles if the startup info doesnt specify new ones
1623
1624         * io.c (GetStdHandle): Return the same handle when the same
1625         standard handle is requested
1626
1627         * handles.c: Pass file descriptors when forking
1628
1629         * daemon.c: Use supplied file descriptors when forking a new
1630         process
1631
1632         * daemon-messages.h: 
1633         * daemon-messages.c: Pass stdin, stdout and stderr file
1634         descriptors to the daemon (used when forking)
1635
1636 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
1637
1638         * daemon.c (_wapi_daemon_main): Use sizeof
1639         (main_socket_address.sun_path) instead of hardcoded 108 value.
1640
1641         * handles.c (shared_init): Use sizeof
1642         (shared_socket_address.sun_path) instead of hardcoded 108 value.
1643
1644 2002-07-10  Dennis Haney  <davh@davh.dk>
1645
1646         * shared.c:
1647         * handles.c:
1648         * daemon.c: Lots of documentation, some added error checking, and
1649         code readability improvements.
1650
1651         * daemon-messages.h: Add the Error request type to improve error
1652         checking.
1653
1654         * daemon-messages.c: Do a bit more error checking on send() and
1655         recv(), and log errors with a higher severity level.
1656
1657 2002-07-04  Dick Porter  <dick@ximian.com>
1658
1659         * daemon.c (process_process_fork): Fix argument handling, due to
1660         buggy understanding of g_strsplit() behaviour.
1661
1662 2002-07-03  Dick Porter  <dick@ximian.com>
1663
1664         * threads.h:
1665         * threads.c: Implement OpenThread().  Define access-control values
1666         for thread handles.
1667
1668         * wapi.h:
1669         * processes.h:
1670         * access.h:
1671         * Makefile.am: Added access.h, to hold shared access-control
1672         definitions
1673
1674 2002-07-02  Dick Porter  <dick@ximian.com>
1675
1676         * wapi-private.h (_WAPI_HANDLE_VERSION): New protocol version
1677         
1678 2002-07-02  Dick Porter  <dick@ximian.com>
1679
1680         * handles.c (shared_init): Make a second attempt to contact the
1681         daemon if the shared memory attach succeeds, but the connect()
1682         fails. (This copes with the daemon crashing without cleaning up
1683         the shared memory.)
1684
1685         * Makefile.am: 
1686         * daemon-private.h:
1687         * daemon.c:
1688         * shared.c (_wapi_shm_attach): Don't exec() anything when we fork
1689         the daemon, it's now built into the library.
1690
1691 2002-06-25  Dick Porter  <dick@ximian.com>
1692
1693         * handles.c:
1694         * handles-private.h:
1695         * daemon-messages.h:
1696         * daemon.c: Process forking and handle data management
1697
1698         * processes.h:
1699         * process-private.h:
1700         * processes.c: Process forking and other support functions
1701
1702 2002-06-25  Dick Porter  <dick@ximian.com>
1703
1704         * versioninfo.h: PE resource decoding
1705
1706         * unicode.c (_wapi_unicode_to_utf8): g_utf16_to_utf8 doesnt need
1707         to be told the string length
1708
1709         * io.c: Removed the ACTUALLY_DO_UNICODE option.  Fixed some leaks.
1710         Moved _wapi_time_t_to_filetime and the WapiFileTime typedef to
1711         timefuncs.c
1712
1713 2002-06-12  Dick Porter  <dick@ximian.com>
1714
1715         * daemon.c: 
1716         * daemon-messages.c: Handle SIGPIPE in a non-stupid way in the
1717         daemon, if MSG_NOSIGNAL isn't available.  Thanks to Jaroslaw
1718         Kowalski <jarek@atm.com.pl> for pointing out the bogosity.
1719
1720 2002-06-10  Jaroslaw Kowalski <jarek@atm.com.pl>
1721
1722         * sockets.c, daemon-messages.c: Prevent SIGPIPE from being raised
1723         when writing to a closed socket.
1724
1725 2002-06-08  Jeffrey Stedfast  <fejj@ximian.com>
1726
1727         * mono-mutex.c (mono_once): New convenience function for my
1728         previous fix.
1729
1730         * handles.c:
1731         * error.c: 
1732         * critical-sections.c: 
1733         * threads.c: 
1734         * sockets.c: 
1735         * semaphores.c: 
1736         * processes.c: 
1737         * mutexes.c: 
1738         * io.c: 
1739         * events.c: 
1740         * atomic.c: Use mono_once() rather than pthread_once().
1741
1742 2002-06-06  Jeffrey Stedfast  <fejj@ximian.com>
1743
1744         * handles.c (_wapi_handle_new): pthread_once() is not atomic, so
1745         if multiple threads all try to call _wapi_handle_new() before the
1746         shared data has been initialized, it is possible that we could get
1747         into a condition where shared_init() is being executed and later
1748         threads will pass by pthread_once() due to the fact that it has
1749         already been called and so therefor will attempt to use the shared
1750         data before it has been completely initialized. If we instead use
1751         a standard mutex locking mechanism around shared_init(), we can
1752         avoid the situation entirely. By wrapping the mutex locking in a
1753         check to see if we've already initialized the data, we can even
1754         avoid wasting resources by having to lock/unlock the mutex in any
1755         later calls (the only time we'd have to worry about
1756         locking/unlocking is the initial race to call shared_init() at
1757         startup).
1758
1759 Sat Jun 1 13:27:11 CEST 2002 Paolo Molaro <lupus@ximian.com>
1760
1761         * atomic.h: inline asm fixes from Dennis Haney (davh@davh.dk).
1762
1763 Fri May 31 16:21:54 CEST 2002 Paolo Molaro <lupus@ximian.com>
1764
1765         * daemon.c, handles.c: rename "sun" local var since it's apparently
1766         a #define on Solaris.
1767
1768 Fri May 31 15:40:14 CEST 2002 Paolo Molaro <lupus@ximian.com>
1769
1770         * daemon-messages.c: work-around MSG_NOSIGNAL missing on some
1771         platforms.
1772
1773 2002-05-15  Dick Porter  <dick@ximian.com>
1774
1775         * wait.c: Fix a deadlock in WaitForMultipleObjects
1776
1777 2002-05-14  Dick Porter  <dick@ximian.com>
1778
1779         * io.c: Fix a cut&paste error, found by
1780         Jaroslaw Kowalski <jarek@atm.com.pl>
1781
1782 2002-05-10  Dan Lewis  <dihlewis@yahoo.co.uk>
1783
1784         * io.c: Nasty typo.
1785
1786 2002-05-09  Dick Porter  <dick@ximian.com>
1787
1788         * threads.c: 
1789         * semaphores.c: 
1790         * processes.c: 
1791         * mutexes.c: 
1792         * handles-private.h: 
1793         * events.c: 
1794         * Makefile.am: Remove now-unused file wait-private.h
1795
1796 2002-05-08  Dick Porter  <dick@ximian.com>
1797
1798         * shared.c: Better error messages, and report when daemon
1799         connection fails rather than blocking forever.  Do some more
1800         shared memory sanity checking.
1801
1802         * handles.c: Better error messages when connecting to shared
1803         memory and the handle daemon.  Fall back to non-shared handles if
1804         an error occurs.  Set the default back to 'shared handles'.  Fix a
1805         crashing bug in scratch space allocation that mangled the block
1806         headers.
1807
1808 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
1809
1810         * handles.c (shared_init): Disable SHM for now, people have too
1811         many problems with this, and the diagnostics are not helping.
1812
1813 2002-05-06  Dan Lewis  <dihlewis@yahoo.co.uk>
1814
1815         * io.c: CreateFile sets win32 last error.
1816
1817 2002-05-05  Dick Porter  <dick@ximian.com>
1818
1819         * wapi-private.h: 
1820         * handles-private.h:
1821         * io.c: 
1822         * io-private.h:
1823         * mutexes.c: 
1824         * mutex-private.h: 
1825         * processes.c: 
1826         * process-private.h: 
1827         * semaphores.c: 
1828         * semaphore-private.h: 
1829         * sockets.c: 
1830         * socket-private.h: 
1831         * events.c: 
1832         * event-private.h: Simplify the WapiHandleOps struct: take out all
1833         the file-specific entries, leaving just the items that operate on
1834         handles themselves.  Split the close operation into shared and
1835         private parts: shared close is called by the daemon.
1836
1837         * handles.c: As above, but also pass handle allocation, ref and
1838         unref operations to the daemon.  Populate the handle_ops array at
1839         compile time, because the daemon needs to call ops on handles too.
1840         Don't bother to track open handle counts any more, the daemon does
1841         that.
1842         
1843         * threads.c: 
1844         * thread-private.h: As above, but also make the thread data
1845         handle-private.
1846
1847         * shared.c: Fork a handle daemon if the calling process created
1848         the shared memory segment.
1849
1850         * daemon.c:
1851         * daemon-messages.c:
1852         * daemon-messages.h:
1853         * Makefile.am: Build a daemon to manage handle allocation and
1854         destruction without needing to lock the shared memory
1855
1856 2002-04-30  Jeffrey Stedfast  <fejj@ximian.com>
1857
1858         * atomic.c: Changed to use a normal mutex rather than a spinlock
1859         since a lot of platforms seem to not have them :\
1860
1861 2002-04-30  Dick Porter  <dick@ximian.com>
1862
1863         * Completely rewrote the handle waiting code: removed the helper
1864         thread and its attendant complexity.  All handle waiting is now
1865         abstracted into the WaitForSingleObject() and
1866         WaitForMultipleObjects() functions.
1867
1868         * Implemented inter-process sharing of handles using sysv shared
1869         memory.  This makes handles even more opaque, with a handle now
1870         just an index into an array.
1871         
1872 2002-04-25  Dan Lewis  <dihlewis@yahoo.co.uk>
1873
1874         * io.c: unitialized pointer in GetCurrentDirectory.
1875
1876 Sat Apr 20 13:37:39 CEST 2002 Paolo Molaro <lupus@ximian.com>
1877
1878         * threads.c: destroy the mutex at thread destruction
1879         (if/when thread destruction code will be actually called).
1880         When protecting a tls data pointer from the gc, use also the 
1881         thread id in the key.
1882         
1883 Wed Apr 17 18:36:27 CEST 2002 Paolo Molaro <lupus@ximian.com>
1884
1885         * timed-thread.c: avoid race condition when setting the thread to
1886         detached.
1887
1888 2002-04-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
1889
1890         * jit.h: to more #include lines to avoid breaking compilation
1891         under windows when upgrading mingw and w32api to version
1892         1.3 (thanks Dick!).
1893
1894 2002-04-16  Dick Porter  <dick@ximian.com>
1895
1896         * atomic.h: Explanatory comment about lack of 80386 support
1897
1898 2002-04-15  Dick Porter  <dick@ximian.com>
1899
1900         * atomic.h: use xaddl for InterlockedIncrement() and
1901         InterlockedDecrement().  Use cmpxchgl in a loop for
1902         InterlockedExchange() and InterlockedExchangePointer().
1903
1904 Mon Apr 15 13:31:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
1905
1906         * unicode.c: fix unicode_len() to not access uninitialized memory
1907         (and updated to conform to mono code style).
1908
1909 Fri Mar 29 17:15:11 CET 2002 Paolo Molaro <lupus@ximian.com>
1910
1911         * io.c: EEXISTS is ignored for directory creation.
1912         * mono-mutex.h: remove silly "pragma }" that emacs users insert
1913         because they use a broken editor:-)
1914
1915 2002-03-28  Dick Porter  <dick@ximian.com>
1916
1917         * sockets.h: 
1918         * sockets.c: 
1919         * io.c: 
1920         * handles.h: 
1921         * handles.c: Warning cleanups
1922
1923 2002-03-27  Dan Lewis <dihlewis@yahoo.co.uk>
1924
1925         * unicode.h, unicode.c: changed to gunichar2
1926         * io.h, io.c: changed strings to gunichar2*, added
1927         SetFileAttributes(), GetCurrentDirectory(), SetCurrentDirectory(),
1928         some fixes to FindFirstFile() and friends.
1929
1930 2002-03-26  Dick Porter  <dick@ximian.com>
1931
1932         * types.h: Implement the large integer struct
1933
1934         * timefuncs.h:
1935         * timefuncs.c: Dummy functions that don't yet implement
1936         QueryPerformanceCounter() and QueryPerformanceFrequency()
1937
1938         * threads.h:
1939         * threads.c: Implement SleepEx()
1940
1941         * system.h:
1942         * system.c: Beginnings of GetSystemInfo()
1943
1944         * mono-mutex.c (pthread_mutex_timedlock): Fix a ms/ns conversion
1945         thinko
1946
1947         * context.h:
1948         * context.c: Dummy function that doesnt yet implement
1949         GetThreadContext()
1950
1951         * atomic.h: 
1952         * atomic.c: Interlocked functions
1953
1954 Mon Mar 25 13:01:40 CET 2002 Paolo Molaro <lupus@ximian.com>
1955
1956         * threads.c: use a gc-safe hash table to store tls pointers.
1957
1958 2002-03-22  Dick Porter  <dick@ximian.com>
1959
1960         * threads.c: Fix a race condition where a thread can start and
1961         exit before the handle has been properly initialised (no reason
1962         why the handle couldn't be initialised beforehand, so do so)
1963
1964         Fix a ms to ns conversion magnitude thinko.
1965
1966 2002-03-21  Dick Porter  <dick@ximian.com>
1967
1968         * semaphores.c: Fix a problem when waiting for one or more
1969         semaphores, and another semaphore is Released (all waiting
1970         semaphores assumed they were signalled)
1971
1972 2002-03-29  Dan Lewis <dihlewis@yahoo.co.uk>
1973
1974         * io.h, io.c, uglify.h: added MoveFile, CopyFile, CreateDirectory,
1975         RemoveDirectory, GetFileAttributes, GetFileAttributesEx
1976
1977 2002-03-19  Dietmar Maurer  <dietmar@ximian.com>
1978
1979         * threads.c (Sleep): bug fix: 1ms == 1000000ns
1980
1981 2002-03-19  Dan Lewis <dihlewis@yahoo.co.uk>
1982
1983         * io.h, io.c, events.c, mutexes.c, semaphores.c, sockets.c,
1984         threads.c, io.c: added flush method to handles.
1985
1986         * io.c: FlushFileBuffers() and FindFirstFile() functions.
1987
1988 Thu Mar 7 17:21:52 CET 2002 Paolo Molaro <lupus@ximian.com>
1989
1990         * threads.c, timed-thread.c, wait.c: Boehm-GC anable.
1991
1992 2002-02-20  Dick Porter  <dick@ximian.com>
1993
1994         * io-layer.h: Always build without cygwin support on windows
1995
1996 Mon Feb 18 15:50:59 CET 2002 Paolo Molaro <lupus@ximian.com>
1997
1998         * sockets.c: #undef DEBUG.
1999
2000 2002-02-14  Jeffrey Stedfast  <fejj@ximian.com>
2001
2002         * io-layer.h: conditionally include sys/filio.h and sys/sockio.h
2003         for FIONBIO, FIONREAD, and SIOCATMARK.
2004
2005 2002-02-14  Jeffrey Stedfast  <fejj@ximian.com>
2006
2007         * sockets.c: conditionally include sys/filio.h and sys/sockio.h
2008         for FIONBIO, FIONREAD, and SIOCATMARK.
2009
2010 2002-02-13  Dick Porter  <dick@ximian.com>
2011
2012         * sockets.c: Implement shutdown and select
2013
2014 2002-02-13  Jeffrey Stedfast  <fejj@ximian.com>
2015
2016         * mono-mutex.[c,h]: New source files that thinly wrap all pthread
2017         functions that take pthread_mutex_t and/or pthread_mutexattr_t
2018         arguments for the sake of portability. Implements recursive
2019         mutexes and pthread_mutex_timedlock.
2020
2021         * critical-sections.c:
2022         * events.c:
2023         * handles.c:
2024         * mutexes.c:
2025         * semaphores.c:
2026         * threads.c:
2027         * timed-thread.c:
2028         * wait.c: Use the mono-mutex wrapper portability functions/macros.
2029
2030         * pthread-compat.[c,h]: Replaced by mono-mutex.[c,h]
2031
2032 2002-01-23  Dick Porter  <dick@ximian.com>
2033
2034         * sockets.c: Networking support, mostly wrapping BSD socket APIs
2035         with handle code, and translating errno into w32 error codes.
2036
2037         * macros.h: Some w32 macros used with the socket support
2038
2039         * error.c: Implemented GetLastError() and SetLastError()
2040
2041         * Makefile.am: Added sockets, with kludge to override some symbols
2042
2043 2001-12-17  Dietmar Maurer  <dietmar@ximian.com>
2044
2045         * unicode.c (_wapi_unicode_to_utf8): byteswap UTF16 strings before
2046         passing them to iconv
2047         (_wapi_unicode_to_utf8): only swap bytes on LE systems, remove bug
2048         from previous commit.
2049
2050 2001-12-11  Dick Porter  <dick@ximian.com>
2051
2052         * io.c: Implement DeleteFile(), GetFileTime(), SetFileTime() and
2053         FileTimeToSystemTime().
2054
2055         * unicode.c (unicode_len): Nasty way of finding length of unicode
2056         string with embedded NULLs (counts until two NULLs together).
2057
2058         * mutexes.c (mutex_close): 
2059         * events.c (event_close): Release the internal pthreads resources
2060
2061 2001-11-26  Dick Porter  <dick@ximian.com>
2062
2063         * critical-sections.c:
2064         * events.c:
2065         * handles.c:
2066         * io.c:
2067         * mutexes.c:
2068         * semaphores.c:
2069         * threads.c:
2070         * timed-thread.c:
2071         * wait.c: turn off DEBUG messages
2072
2073 2001-11-22  Dick Porter  <dick@ximian.com>
2074
2075         * handles.c (SignalObjectAndWait): Implement
2076
2077         * wait.c (WaitForSingleObject): Fix case where timeout == 0
2078
2079         * threads.c:
2080         * semaphores.c:
2081         * mutexes.c:
2082         * io.c:
2083         * events.c: Support for SignalObjectAndWait
2084         
2085 2001-11-21  Dick Porter  <dick@ximian.com>
2086
2087         * events.c:
2088         * handles.c:
2089         * mutexes.c:
2090         * semaphores.c:
2091         * threads.c:
2092         * wait.c: Reliable method of returning which handle was signalled
2093         on return from WaitForMultipleObjects().
2094
2095 2001-11-21  Dick Porter  <dick@ximian.com>
2096
2097         * events.c: Implement events
2098
2099 2001-11-15  Dick Porter  <dick@ximian.com>
2100
2101         * mutexes.c: Implement mutexes
2102
2103         * threads.c: 
2104         * semaphores.c: 
2105         * misc.c: Factor out some common code
2106
2107 2001-11-13  Dick Porter  <dick@ximian.com>
2108
2109         * threads.c: Implement TLS.  Implement GetCurrentThreadId(), and
2110         GetCurrentThread() by maintaining a hash of thread handles.
2111
2112         * threads.h: Define thread and process creation flags
2113
2114 2001-11-12  Dick Porter  <dick@ximian.com>
2115
2116         * critical-sections.c: Implement critical sections
2117
2118 2001-11-12  Dick Porter  <dick@ximian.com>
2119
2120         * semaphores.c: Implement semaphores
2121
2122         * wait.c (wait_for_item): Maintain a wait count rather than count
2123         signalled booleans.
2124
2125         * threads.c (thread_wait_multiple): Don't lock the wait item, that
2126         will block other wait threads
2127
2128 2001-11-11  Dick Porter  <dick@ximian.com>
2129
2130         * Makefile.am: Rename some automake variables
2131         (from Nick Drochak <ndrochak@gol.com>)
2132
2133 2001-11-10  Dick Porter  <dick@ximian.com>
2134
2135         * Makefile.am (libwapiincludedir): Fix include destination
2136
2137         * .cvsignore: Ignore generated files
2138
2139 2001-11-10  Dietmar Maurer  <dietmar@ximian.com>
2140
2141         * pthread-compat.c: added some include files to make it compile on
2142         linux.
2143
2144 2001-11-08  Dick Porter  <dick@ximian.com>
2145
2146         * Initial checkin.
2147
2148         This is a library emulating the win32 threading and IO API.