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