Brandon Turner wrote:
I just released 0.3.0 RC2 to SourceForge and you can download it here: https://sourceforge.net/project/showfiles.php?group_id=6553&package_id=6...
This is our final sanity check before we release the final version. I am planing on uploading the release to to SourceForge on Wednesday night and then Thursday morning will be our official release time. Frik or MGW, will you be able to update the home page on Thursday morning? If not let me know and I can do it if we have a graphic ready.
Note to all devs and contributors: We need a change log! I have made a svn log for all commits. It can be found at http://www.brandonturner.org/log.txt . Please let me know if you are going to do your own change log, otherwise I will do a change log for everyone else on Tuesday night, but no promises I will find everything you did.
I finished my log, can you add it to the WIKI in the right sections? Almost 99% of these go into Kernel, and the ones that don't are clearly marked as such.
- Clear Tcb->Win32Thread during win32 cleanup. - Allow TLS usage for 1088 TLS slots, fixes part of Bug 191. Patch by Filip Navara (navaraf@reactos.com) - Added support for NTLDR style freeloader GUI. - Win32k Header Rewrite - Fix kernel-mode executive atom implementation (mostly add SEH and tidy up the code). Then fix kernel32 implementation which was sending incorrect sizes, and also re-factored the entire code, since most functions were quatriplicated. - Fixed a bug in RtlCreateAtomTable. - Fixed bugs in Profile implementation. Add support for segmented profile objects. - Add SEH to NtRaiseHardError. - Fix a bug in NtSetSystemTime. - Implemented InterlockedBitTestAndReset, InterlockedBitTestAndSet, InterlockedExchangeAddSizeT. - Reimplemented Rundown Protection. - Implement YieldProcessor - KiAcquireSpinlock and KiReleaseSpinLock should be no-op functions on uniprocessor machines. - KiReleaseSpinLock does not need interlocked access to release the lock. - Use portable code for KiAcquireSpinLock. Also use interlocked bit operations since they are faster. - Rewrite Executive Interlocked Functions to actually work as supposed and also immensly increase their speed, most notably on non-SMP machines. - Fix shamefully dangerously broken Work Thread/Queue/Item implementation. - Implement a worker thread balance set manager. - Implement Pushlocks. - Optimized the dispatcher lock. It is now gone on non-SMP systems and IRQL is raised or lowered instead. - Fixed some places which werne't setting the dispatcher header's size member correctly. - Created separate cases for satisfying mutant, non-mutant and generic objects, to optimize wait satisfaction. - Fixed a case in KiCheckAlertability: we also need to check if the thread is alerted in Kernel-Mode, even if the wait mode given was user and user-mode is not alerted. - Fixed signaling checks across the wait code and removed KiCheckIfObjectSignaled. We must not consider the mutant as signaled if SignalState is = 1. - Fix code to check if the wait blocks' status is STATUS_TIMEOUT, because we do not need to check for signal state in that case. - Removed the exports for internal dispatcher lock routines. - Implemented Queued and In-Stack Queued Spinlocks (at DPC-Level). - Separate UP and MP spinlock functions. - Optimize UP spinlock functions so they don't call ntoskrnl anymore and only raise/lower irql. - Implemented Queued Spinlocks and In-Stack Queued Spinlocks for UP machines. - Implemented KeAcquireInStackQueuedSpinLock, KeReleaseInStackQueuedSpinLock, KeAcquireQueuedSpinLock, KeReleaseQueuedSpinLock, KeTryToAcquireQueuedSpinLock, KeTryToAcquireQueuedSpinLockRaiseToSynch, KeAcquireQueuedSpinLockRaisetoSynch. - Rewrite ERESOURCE implementation. - Fix some bugs in Kernel Queue implementation - Handle special case where we have kernel apcs pending and your previous irql was below APC_LEVEL during the wait code. - Set the right Thread->WaitTime dring waits - Initialize WaitBlock->Thread during thread creation. - Make APCs queuable for the thread after it's created - Enable Timer Block optimization since it works now. This allows us not to always set-up for each wait, since most of its fields can remain static. - Properly link wait block together with the waitlist of the timer. - MSVC backend/complation improvements. Made almost every single module build with MSVC. - Added PCH (Precompiled Header) usage to almost every module. - Remove KiServiceCheck and implement PsConvertToGuiThread in its place. Has support for detecting and returning errors in case of invalid cases, currently disabled code for doing the required 4kb->12kb stack conversion, and handling certain failures. - Fix MmCreateKernelStack to actually take into account the GuiStack parameter. - Implement KeSwitchKernelStack - Enable code in PsConvertToGuiThread to create a new stack and switch to it. GUI Threads now get the 60KB of kernel stack space they deserve. - Implement (although non-optimally) MmGrowKernelStack for future use. - Fix some bugs in KiCallUserMode - Fix probably one of the most devastating hidden ROS bugs currently in trunk. KWAIT_BLOCK's WaitType was defined as USHORT instead of UCHAR, causing a KeWaitForMultipleObjects of 2 or more objects to overwrite the Thread's PreviousMode (an effect of this is that 99% of user-mode callbacks from win32k were being done with the mode set to Kernel-Mode instead of UserMode). A KeWaitForMultipleObjects of 3 or more objects, or the timer object itself in some cases would cause this conflict to occur with the ResourceIndex member, potentially corrupting the ERESOURCE owner table in my updated implementation. - Rewrite usermode callbacks. These changes should greatly optimize graphic operations. After these changes, my "idle" CPU Usage in taskmgr went from 7-8% to 4-5%, while on the performace page, from 15-18% to 10-13%. - Set KernelApcPending == TRUE in KiCheckForKernelApcDelivery if we are at APC_LEVEL. - Properly create, grow and delete the kernel stack. Fixes potential memory leaks introduced in 20806. - Fix flaw in win32k hardware message queue which used KMUTEX instead of KMUTANT, thus double-disabling Kernel APCs during the parsing of the queue, which would result in actually deliving hardware message callbacks with Kernel APCs disabled when going to user-mode. This was detected when my new user-mode callback rewrite added checks for this situation, and it originally caused a bugcheck. Since the message queue code is now fixed, the bugcheck has been re-enabled, hopefully no other such violations will be detected. - Update KeContextToTrapFrame to support separate ContextFlags parameters in the scenario where we want to convert more then the Context's flag specify - Rename some of the internal FPU flags to external names and make them global. - Improve context creation of new threads to initialize the virgin NPX state for new threads, to clear DR debug registers, to properly convert the context to a trap frame, to set the right segment registers, to set the debugging mark in the trap frame, and to properly set the initial eflags. - Don't bother with clearing the DRs in the CONTEXT, just clear DR7 in the trap frame after the conversion. - Fix some nasty context switch bugs: * We did not update the KPCR's stacklimit/initialstack with the new thread's stacklimit/initialstack. * We always assumed V86 frame bias in KeInitializeThreadContext. * We did not properly update ESP0 during context switch, to make space for the NPX frame and V86 bias. * We did not update fs:18h to point to the new TEB. * We did not clear out GS when switching processes, nor update the TSS's cr3. * If a new LDT was being updated, we over-wrote EBP (which was supposed to point to the TSS) by the GDT pointer. * We used a push/pop esp0 hack which hid the fact we never updated esp0. - Fix a bad bug in the system call handler and interrupt/trap exit code which was causing a jump to the incorrect epilogue if V86 mode was detected. - Make traps use the shared EOI (End Of Interrupt) helper instead of their own custom trap exit code. - Share some more trap code. - Increase total system call count in KPCR for performance counter. - Increase per-systemcall call count in the KiServiceTable if it was specified, for performance counters. - Add sanity checks to system call handler to detect. - Detect if exiting with incorrect IF state. - Detect if exiting with broken stack. - Detect if exiting with a broken trap frame (note: Disabled in Kei386EoiHelper beause this raises the assertion. The trap frame is valid, it's just that some old code is using DbgArgMark for other purposes. Will fix.) - Detect if exiting with invalid FS. - Detect if exiting with invalid Exception List. - Detect if exiting with incorrect exception list and/or incorrect previmous mode on the stack (to detect macro/calling type mismatch). - Use MmUserProbeAddress in the system call handler to verify the parametes we got from user-mode are valid and return STATUS_ACCESS_VIOLATION if the check fails. - Handle failure after PsConvertToGuiThread and return STATUS_INVALID_SYSTEM_SERVICE and/or FALSE and/or -1 on failure. - Made MCE/XMMI interrupts unexpected on-boot. <<<<