projects
/
reactos.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sync with trunk r46493
[reactos.git]
/
subsystems
/
win32
/
win32k
/
objects
/
gdibatch.c
diff --git
a/subsystems/win32/win32k/objects/gdibatch.c
b/subsystems/win32/win32k/objects/gdibatch.c
index
b0c8ec9
..
c2b5434
100644
(file)
--- a/
subsystems/win32/win32k/objects/gdibatch.c
+++ b/
subsystems/win32/win32k/objects/gdibatch.c
@@
-51,8
+51,9
@@
SynchonizeDriver(FLONG Flags)
Flags = DSS_TIMER_EVENT;
Device = IntEnumHDev();
Flags = DSS_TIMER_EVENT;
Device = IntEnumHDev();
-
- SurfObj = EngLockSurface( Device->pSurface );
+// UNIMPLEMENTED;
+//ASSERT(FALSE);
+ SurfObj = 0;// EngLockSurface( Device->pSurface );
if(!SurfObj) return;
DoDeviceSync( SurfObj, NULL, Flags);
EngUnlockSurface(SurfObj);
if(!SurfObj) return;
DoDeviceSync( SurfObj, NULL, Flags);
EngUnlockSurface(SurfObj);
@@
-66,14
+67,34
@@
ULONG
FASTCALL
GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr)
{
FASTCALL
GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr)
{
+ BOOL Hit = FALSE;
+ ULONG Cmd = 0, Size = 0;
PDC_ATTR pdcattr = NULL;
if (dc)
{
PDC_ATTR pdcattr = NULL;
if (dc)
{
- pdcattr = dc->pdcattr;
+ pdcattr = dc->pdcattr;
+ }
+
+ _SEH2_TRY
+ {
+ Cmd = pHdr->Cmd;
+ Size = pHdr->Size; // Return the full size of the structure.
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ Hit = TRUE;
}
}
- // The thread is approaching the end of sunset.
- switch(pHdr->Cmd)
+ _SEH2_END;
+
+ if (Hit)
+ {
+ DPRINT1("WARNING! GdiBatch Fault!\n");
+ return 0;
+ }
+
+ // FYI! The thread is approaching the end of sunset.
+ switch(Cmd)
{
case GdiBCPatBlt: // Highest pri first!
break;
{
case GdiBCPatBlt: // Highest pri first!
break;
@@
-113,7
+134,7
@@
GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr)
break;
}
break;
}
- return
pHdr->Size; // Return the full size of the structure.
+ return
Size;
}
/*
}
/*
@@
-162,8
+183,11
@@
NtGdiFlushUserBatch(VOID)
// No need to init anything, just go!
for (; GdiBatchCount > 0; GdiBatchCount--)
{
// No need to init anything, just go!
for (; GdiBatchCount > 0; GdiBatchCount--)
{
+ ULONG Size;
// Process Gdi Batch!
// Process Gdi Batch!
- pHdr += GdiFlushUserBatch(pDC, (PGDIBATCHHDR) pHdr);
+ Size = GdiFlushUserBatch(pDC, (PGDIBATCHHDR) pHdr);
+ if (!Size) break;
+ pHdr += Size;
}
if (pDC)
}
if (pDC)