Ошибка проявляется при работе в 1с. После открытия нескольких форм wine падает. Backtrace: =>0 0x7e6b7bcc X11DRV_DIB_Lock+0x1e(physBitmap=0x7fff, req=2) [/srv/shpigor/Projects/eterdib/dlls/winex11.drv/dib.c:4556] in winex11 (0x0032edec) 1 0x7e6a5081 X11DRV_StretchBlt+0x46(physDevDst=0x1a8c20, xDst=3, yDst=3, widthDst=13, heightDst=15, physDevSrc=<register EDI not in topmost frame>, xSrc=0, ySrc=396, widthSrc=423, heightSrc=-397, rop=<register ESI not in topmost frame>) [/srv/shpigor/Projects/eterdib/dlls/winex11.drv/bitblt.c:1761] in winex11 (0x0032ee2c) 2 0x7ebeec8a StretchBlt+0xcd(hdcDst=0x1868, xDst=3, yDst=3, widthDst=13, heightDst=15, hdcSrc=0x6588, xSrc=0, ySrc=396, widthSrc=423, heightSrc=-397, rop=13369376) [/srv/shpigor/Projects/eterdib/dlls/gdi32/bitblt.c:329] in gdi32 (0x0032eeec) err:dbghelp:pe_load_dbg_file Couldn't find .DBG file "oleaut32.dbg" ("4\xee3") 3 0x6539e5de in oleaut32 (+0x5e5de) (0x00006588) 4 0x00000000 (0x00000000) 0x7e6b7bcc X11DRV_DIB_Lock+0x1e [/srv/shpigor/Projects/eterdib/dlls/winex11.drv/dib.c:4556] in winex11: movl 0x18(%eax),%eax Более простой способ воспроизведения - запуск winver. Wine падает с аналогичным backtrace, так же на X11DRV_DIB_Lock.
Если использовать библиотеку wine oleaut32, то ошибка не проявляется. По умолчанию эта библиотека сторонняя, т.е. от microsoft.
Проблема, вероятно, в том, что в WinAPI функции StretchBlt вызывается функция драйвера DC назначения. Т.е. если идет копирование из памяти в X, то вызывается X11DRV_StretchBlt. Ей в качестве источника задается dib устройство, но X-ы об этом не знают и работают с ним как с X устройством.
Выложил тест, имитирующий падение. Он есть в архиве: http://lists.etersoft.ru/pipermail/wine-patches/2009-March/000360.html Кстати, тест падает в любом случае, не зависимо от того, какая используется библиотека oleaut32 - встроенная или сторонняя.
To Илья: исправлена функция Stretchblt, обнови гит и проверь 1с еще раз. Если падать перестанет, закрывай багу.
После приложения патча: Fix StretchBlt (blitting between X and DIB physDevices) wine перестал запускаться. Выдается ошибка: err:module:attach_process_dlls "shell32.dll" failed to initialize, aborting Причем некоторые тесты нормально отрабатывают (например dlls/gdi32/tests), а приложения вроде winver, winefile, notepad нет. При откате патча все снова работает нормально.
Ошибка с shell32 библиотекой происходит в результате вызова в функции BITBLT_ConvertDIBtoDDB: memcpy( &bmi->bmiHeader, &srcBmpObj->dib->dsBmih, sizeof(BITMAPINFOHEADER) ); если BITBLT_ConvertDIBtoDDB вызывалась из StretchBlt.
Выложил патч. Решение заключается в проверке DIBSECTION объекта srcBmpObj на NULL в функции BITBLT_ConvertDIBtoDDB. Без этого происходит падение wine, т.к. в последующем вызове memcpy выполняется попытка перехода по указателю: srcBmpObj->dib->dsBmih. Падать wine перестал, но возможны проблемы с корректной отрисовкой картинок.