[ros-dev] ReactOS 0.3.0 RC2 Released

Alex Ionescu ionucu at videotron.ca
Thu Aug 17 01:53:14 CEST 2006


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=6629
> 
> 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 at 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.
<<<<


-- 
Best regards,
Alex Ionescu
Project Lead, TinyKRNL
Kernel-Mode Software Design Engineer, ReactOS


More information about the Ros-dev mailing list