New issue
Advanced search Search tips

Issue 1579 link

Starred by 6 users

Issue metadata

Status: Accepted
Area: Font
NextAction: ----
Priority: Medium
Type: Defect

Sign in to add a comment

Thread which calls CreateCompatibleDC thread must live as long as the DC.

Project Member Reported by, Aug 29 2013

Issue description

MSDN states, with regard to CreateCompatibleDC(HDC hdc):

If hdc is NULL, the thread that calls CreateCompatibleDC owns the HDC that is created. When this thread is destroyed, the HDC is no longer valid. Thus, if you create the HDC and pass it to another thread, then exit the first thread, the second thread will not be able to use the HDC.

This was noticed because a recent test bot on Chromium caught this with the following error message

12:39:22 [INFO] Found 1 error reports
12:39:22 [INFO] Report #1
GDI USAGE ERROR: DC 0x710107bc used for select was created by now-exited thread 4540 by duplicating NULL, which makes it a thread-private DC
# 0 skia.dll!HDCOffscreen::draw [third_party\skia\src\ports\skfonthost_win.cpp:512]
# 1 skia.dll!SkScalerContext_GDI::generateImage [third_party\skia\src\ports\skfonthost_win.cpp:1296]
# 2 skia.dll!SkScalerContext::getImage [third_party\skia\src\core\skscalercontext.cpp:692]
# 3 skia.dll!SkGlyphCache::findImage [third_party\skia\src\core\skglyphcache.cpp:327]
# 4 skia.dll!D1G_NoBounder_RectClip [third_party\skia\src\core\skdraw.cpp:1493]
# 5 skia.dll!SkDraw::drawText [third_party\skia\src\core\skdraw.cpp:1751]
# 6 skia.dll!SkBitmapDevice::drawText [third_party\skia\src\core\skdevice.cpp:471]
# 7 skia.dll!SkCanvas::drawText [third_party\skia\src\core\skcanvas.cpp:1979]
# 8 media.dll!media::FakeVideoCaptureDevice::OnCaptureTask [media\video\capture\]
# 9 media.dll!base::internal::RunnableAdapter<void (__thiscall media::FakeVideoCaptureDevice::*)(void)>::Run [base\bind_internal.h:134]
Note: @0:01:18.938 in thread 7928
Note: DC was allocated here:
Note: # 0 system call NtGdiCreateCompatibleDC                         
Note: # 1 GDI32.dll!CreateCompatibleDC+0xf      (0x770a5504 <GDI32.dll+0x15504>)
Note: # 2 skia.dll!HDCOffscreen::draw [third_party\skia\src\ports\skfonthost_win.cpp:465]
Note: # 3 skia.dll!SkScalerContext_GDI::generateImage [third_party\skia\src\ports\skfonthost_win.cpp:1296]
Note: # 4 skia.dll!SkScalerContext::getImage [third_party\skia\src\core\skscalercontext.cpp:692]
Note: # 5 skia.dll!SkGlyphCache::findImage [third_party\skia\src\core\skglyphcache.cpp:327]
Note: # 6 skia.dll!D1G_NoBounder_RectClip [third_party\skia\src\core\skdraw.cpp:1493]
Note: # 7 skia.dll!SkDraw::drawText [third_party\skia\src\core\skdraw.cpp:1751]
Note: # 8 skia.dll!SkBitmapDevice::drawText [third_party\skia\src\core\skdevice.cpp:471]
Note: # 9 skia.dll!SkCanvas::drawText [third_party\skia\src\core\skcanvas.cpp:1979]
Note: #10 media.dll!media::FakeVideoCaptureDevice::OnCaptureTask [media\video\capture\]
Note: #11 media.dll!base::internal::RunnableAdapter<void (__thiscall media::FakeVideoCaptureDevice::*)(void)>::Run [base\bind_internal.h:134]

Project Member

Comment 1 by, Sep 22 2014

Labels: Area-Font
Project Member

Comment 2 by, Dec 7 2015

Labels: Hotlist-Fixit

Sign in to add a comment