Author: janderwald
Date: Wed Aug 22 22:29:20 2007
New Revision: 28454
URL: http://svn.reactos.org/svn/reactos?rev=28454&view=rev
Log:
- fix description by Pierre Schweitzer (heis spiter at hotmail com)
Modified:
trunk/rosapps/downloader/downloader.xml
Modified: trunk/rosapps/downloader/downloader.xml
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/downloader/downloader.xml?…
==============================================================================
--- trunk/rosapps/downloader/downloader.xml (original)
+++ trunk/rosapps/downloader/downloader.xml Wed Aug 22 22:29:20 2007
@@ -14,7 +14,7 @@
<description>The most popular and one of the best free Web Browsers out there.</description>
<location>http://ftp-mozilla.netscape.com/pub/mozilla.org/firefox/releases/latest/win…</location>
</application>
- <application name="Thunderbird">
+ <application name="Thunderbird 1.5">
<regname>Mozilla Thunderbird (1.5)</regname>
<licence>MPL/GPL/LGPL</licence>
<version>1.5.0.9</version>
Author: arty
Date: Wed Aug 22 11:28:45 2007
New Revision: 28451
URL: http://svn.reactos.org/svn/reactos?rev=28451&view=rev
Log:
Bug found by arty, thanks to alex for helping fix it:
Process termination fixes part 1: don't suicide our process when we're killing
a sibling.
- Clarify the use of KillByHandle. It does *not* mean "suicide".
- In fact, we had considered the use of KillByHandle backward, that is,
our process would commit suicide if it was killing a sibling process.
- Make suicide contingent on killing the same process.
- Properly handle DBG_TERMINATE_PROCESS semidocumented debugger hack.
Modified:
trunk/reactos/ntoskrnl/include/internal/ps.h
trunk/reactos/ntoskrnl/ps/kill.c
Modified: trunk/reactos/ntoskrnl/include/internal/ps.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/…
==============================================================================
--- trunk/reactos/ntoskrnl/include/internal/ps.h (original)
+++ trunk/reactos/ntoskrnl/include/internal/ps.h Wed Aug 22 11:28:45 2007
@@ -57,6 +57,10 @@
#define PSTRACE(x, ...) DPRINT(__VA_ARGS__);
#define PSREFTRACE(x)
#endif
+
+#define PspSetProcessFlag(Process, Flag) \
+ InterlockedOr((PLONG)&Process->Flags, Flag)
+
//
// Maximum Count of Notification Routines
Modified: trunk/reactos/ntoskrnl/ps/kill.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ps/kill.c?rev=284…
==============================================================================
--- trunk/reactos/ntoskrnl/ps/kill.c (original)
+++ trunk/reactos/ntoskrnl/ps/kill.c Wed Aug 22 11:28:45 2007
@@ -1108,12 +1108,21 @@
PSTRACE(PS_KILL_DEBUG,
"ProcessHandle: %p ExitStatus: %p\n", ProcessHandle, ExitStatus);
- /* Remember how we will kill it */
- KillByHandle = (ProcessHandle != NULL);
+ /* Were we passed a process handle? */
+ if (ProcessHandle)
+ {
+ /* Yes we were, use it */
+ KillByHandle = TRUE;
+ }
+ else
+ {
+ /* We weren't... we assume this is suicide */
+ KillByHandle = FALSE;
+ ProcessHandle = NtCurrentProcess();
+ }
/* Get the Process Object */
- Status = ObReferenceObjectByHandle((KillByHandle) ?
- ProcessHandle : NtCurrentProcess(),
+ Status = ObReferenceObjectByHandle(ProcessHandle,
PROCESS_TERMINATE,
PsProcessType,
KeGetPreviousMode(),
@@ -1138,9 +1147,8 @@
return STATUS_PROCESS_IS_TERMINATING;
}
- /* Set the delete flag */
- if (!KillByHandle) InterlockedOr((PLONG)&Process->Flags,
- PSF_PROCESS_DELETE_BIT);
+ /* Set the delete flag, unless the process is comitting suicide */
+ if (KillByHandle) PspSetProcessFlag(Process, PSF_PROCESS_DELETE_BIT);
/* Get the first thread */
Status = STATUS_NOTHING_TO_TERMINATE;
@@ -1169,23 +1177,22 @@
ExReleaseRundownProtection(&Process->RundownProtect);
/* Check if we are killing ourselves */
- if (Process != CurrentProcess)
- {
- /* Check for the DBG_TERMINATE_PROCESS exit code */
- if (ExitStatus == DBG_TERMINATE_PROCESS)
- {
- /* Disable debugging on this process */
- DbgkClearProcessDebugObject(Process, NULL);
- }
- }
- /* Make sure that we got a handle */
- else if (KillByHandle)
- {
- /* Dereference the project */
- ObDereferenceObject(Process);
-
- /* Terminate ourselves */
- PspTerminateThreadByPointer(CurrentThread, ExitStatus, TRUE);
+ if (Process == CurrentProcess)
+ {
+ /* Also make sure the caller gave us our handle */
+ if (KillByHandle)
+ {
+ /* Dereference the project */
+ ObDereferenceObject(Process);
+
+ /* Terminate ourselves */
+ PspTerminateThreadByPointer(CurrentThread, ExitStatus, TRUE);
+ }
+ }
+ else if (ExitStatus == DBG_TERMINATE_PROCESS)
+ {
+ /* Disable debugging on this process */
+ DbgkClearProcessDebugObject(Process, NULL);
}
/* Check if there was nothing to terminate, or if we have a Debug Port */
Author: fireball
Date: Tue Aug 21 23:56:22 2007
New Revision: 28448
URL: http://svn.reactos.org/svn/reactos?rev=28448&view=rev
Log:
- Allow pci read/writes during proving BAR's size operation (fixes a read/write of 0xFFFFFF.. memory addresses).
Modified:
branches/olpc/hal/halx86/generic/olpcpci.c
Modified: branches/olpc/hal/halx86/generic/olpcpci.c
URL: http://svn.reactos.org/svn/reactos/branches/olpc/hal/halx86/generic/olpcpci…
==============================================================================
--- branches/olpc/hal/halx86/generic/olpcpci.c (original)
+++ branches/olpc/hal/halx86/generic/olpcpci.c Tue Aug 21 23:56:22 2007
@@ -172,6 +172,7 @@
static ULONG zero_loc = 0;
static int bar_probing = 0; /* Set after a write of ~0 to a BAR */
+static ULONG bar_offset = 0; /* what bar */
static ULONG *hdr_addr(const ULONG *hdr, int reg)
{
@@ -188,7 +189,17 @@
* BAR0), and don't skip the size mask area.
*/
- addr = (ULONG)hdr + reg + (bar_probing ? -0x10 : 0x20);
+ if (bar_probing && (bar_offset == reg))
+ {
+ addr = (ULONG)hdr + reg + (bar_probing ? -0x10 : 0x20);
+
+ /* Reset probing for this bar */
+ bar_probing = 0;
+ }
+ else
+ {
+ addr = (ULONG)hdr + reg + 0x20;
+ }
if ( ((ULONG)addr - (ULONG)hdr) >= 0x90 )
{
@@ -196,7 +207,6 @@
(ULONG)addr - (ULONG)hdr, bar_probing, reg);
}
- bar_probing = 0;
return (ULONG *)addr;
}
@@ -261,7 +271,7 @@
}
}
- ASSERT(len == 1 || len == 2 || len == 4)
+ ASSERT(len == 1 || len == 2 || len == 4);
RtlCopyMemory(value, addr, len);
}
@@ -274,14 +284,18 @@
* Mostly we just discard writes, but if the write is a size probe
* (i.e. writing ~0 to a BAR), we remember it and arrange to return
* the appropriate size mask on the next read. This is cheating
- * to some extent, because it depends on the fact that the next
- * access after such a write will always be a read to the same BAR.
+ * to some extent, but it's possible to do intermediate read/writes
+ * when probing BAR's size now.
*/
if ((reg >= 0x10) && (reg < 0x2c)) {
/* Write is to a BAR */
if (*(PULONG)value == ~0)
+ {
+ //DbgPrint("OLPC PCI: Probing bar size, devfn %x, reg %x\n", devfn.u.AsULONG, reg);
bar_probing = 1;
+ bar_offset = reg;
+ }
} else {
/*
* No warning on writes to ROM BAR, CMD, LATENCY_TIMER,
@@ -289,6 +303,8 @@
*/
if ((reg != 0x30) && (reg != 0x04) && (reg != 0x0d) &&
(reg != 0x0c) && (reg != 0x44))
+ {
DbgPrint("OLPC PCI: Config write to devfn %x reg %x value %x\n", devfn, reg, *value);
+ }
}
}