Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dbx_mdbx: Crash under Wine #1209

Closed
dartraiden opened this issue Mar 25, 2018 · 40 comments
Closed

dbx_mdbx: Crash under Wine #1209

dartraiden opened this issue Mar 25, 2018 · 40 comments

Comments

@dartraiden
Copy link
Member

dartraiden commented Mar 25, 2018

<Ivan 83> у меня сконвертить не может и ваще потом ничо не работает, пока не откатишь руками на старую версию миранды

@dartraiden dartraiden changed the title Crash under Wine dbx_mdbx: Crash under Wine Dec 5, 2018
@MirLach
Copy link

MirLach commented Jan 3, 2019

Is there any chance to have this bug fixed?
I used Miranda-IM under the Wine without any problems for many years but after December changes in ICQ protocol Miranda IM doesn't work anymore so I want to migrate to Miranda NG. I found this page https://wiki.miranda-ng.org/index.php?title=Miranda_under_Wine - I am also using FreeBSD with Wine.
But the latest version of Miranda NG doesn't work due to this bug.

I am not a developer but I can provide any information / debug test you will ask.
It would be really nice to have Miranda working again.

@jl452
Copy link

jl452 commented Jan 8, 2019

first we need - log from miranda WHY IT CLOSED SILENTLY with error code 255 !
it not fail! it autoclosed!!!

@jl452
Copy link

jl452 commented Jan 8, 2019

miranda x86 v0.95.10
ubuntu 18.04
wine-3.20 (Staging)
wine-4.0-rc4

some with "start as crashdumper"

@jl452
Copy link

jl452 commented Jan 8, 2019

is here way start miranda in full trace mode? LOG_LEVEL=DEBUG or something?

@MirLach
Copy link

MirLach commented Feb 1, 2019

I am sorry for ma late reply. I was very busy. Now I have some spare time to try to debug this issue if somebody can tell me what command I should run.

If I start Miranda NG for the first time (without existing profile) it shows me the dialog window where I can create new profile. When I click "create" then Miranda closes silently.
On the next run it does not open any window, it immediately terminates without any error printed / logged.

I am using this shell script to start Miranda under Wine in my KDE4 environment

#!/bin/sh

export WINEPATH='c:\Program Files\miranda-ng-v0.95.11\Libs'

cd "$HOME/.wine/drive_c/Program Files/miranda-ng-v0.95.11/"

/usr/bin/env WINEPREFIX=$HOME/.wine/ LANG=cs_CZ.UTF-8 /usr/local/bin/wine "$HOME/.wine/drive_c/Program Files/miranda-ng-v0.95.11/Miranda32.exe"

If I run it from konsole, I only see this:

./miranda-ng

Fontconfig warning: "local.conf", line 1093: saw number, expected matrix
016c:fixme:msvcrt:_configure_wide_argv (1) stub
016c:fixme:msvcrt:_initialize_wide_environment stub

Nothing more.

So what I should run to get some debug output?

@sss123next sss123next self-assigned this Apr 16, 2019
@sss123next
Copy link
Collaborator

i am on it.

@sss123next
Copy link
Collaborator

looks like it's internal logic error, it's normal process exit

@georgehazan
Copy link
Member

@MirLach seems that Wine doesn't support CommandLineToArgvW()...
I wonder if there's some info about it

@sss123next
Copy link
Collaborator

i will do tests.

@sss123next
Copy link
Collaborator

sss123next commented Apr 17, 2019

CommandLineToArgvW - works under wine

i have succesfully tested following code:

#include "pch.h"
#include <windows.h>
#include <stdio.h>
#include <shellapi.h>

int __cdecl main()
{
	LPWSTR *szArglist;
	int nArgs;
	int i;

	printf("into main\n");

	szArglist = CommandLineToArgvW(L"arg1 arg2 arg3 arg4", &nArgs);
	if (NULL == szArglist)
	{
		printf("CommandLineToArgvW failed\n");
		return 0;
	}
	else for (i = 0; i < nArgs; i++) printf("%d: %ws\n", i, szArglist[i]);

	// Free memory allocated for CommandLineToArgvW arguments.

	LocalFree(szArglist);

	return(1);
}

built in msvc2017 in debug dll mode, i have also used runtime files found on my windows installation ucrtbased.dll, vcruntime140d.dll

@sss123next
Copy link
Collaborator

we need to add a lot of debug messages to stdout during initialization to find out what exactly does not work

@sss123next
Copy link
Collaborator

sss123next commented Apr 17, 2019

looks like problem not in miranda code itself, but in libmdbx instead.

i have added some trace to stdout, and found this:

z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::~CDbxMDBX:53 enter
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::~CDbxMDBX:70 exit ok
z:\plugins\dbx_mdbx\src\init.cpp:makeDatabase:71 enter
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::CDbxMDBX:41 enter
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::CDbxMDBX:48 exit ok
z:\plugins\dbx_mdbx\src\init.cpp:makeDatabase:73 exit ok
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:261 enter
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:268
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:270
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:272
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:274
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:276
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:278
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:293
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6464 enter
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6528
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6533
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6538
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6540
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6548
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6551
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6556
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6558
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6656
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_close0:6668 enter
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_close0:6671
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_close0:6680
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_close0:6691
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_close0:6706
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_close0:6711
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_close0:6718
z:\libs\libmdbx\src\src\lck-windows.c:mdbx_lck_destroy:503 enter
z:\libs\libmdbx\src\src\lck-windows.c:mdbx_lck_destroy:506
z:\libs\libmdbx\src\src\lck-windows.c:mdbx_lck_destroy:510
z:\libs\libmdbx\src\src\lck-windows.c:mdbx_lck_destroy:512

log done against a889356

@sss123next
Copy link
Collaborator

i have created branch for debuging this issue

https://github.com/miranda-ng/miranda-ng/tree/mdbx_wine

@sss123next
Copy link
Collaborator

log on fab2860

z:\plugins\dbx_mdbx\src\init.cpp:CMPlugin::Load:119 enter
z:\plugins\dbx_mdbx\src\init.cpp:CMPlugin::Load:122 exit ok
z:\plugins\dbx_mdbx\src\init.cpp:makeDatabase:71 enter
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::CDbxMDBX:41 enter
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::CDbxMDBX:48 exit ok
z:\plugins\dbx_mdbx\src\init.cpp:makeDatabase:73 exit ok
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:261 enter
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:268
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:270
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:272
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:274
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:276
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:278
z:\plugins\dbx_mdbx\src\dbintf.cpp:CDbxMDBX::Map:293
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6474 enter
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6541
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6546
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6552
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6554
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6562
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6565
z:\libs\libmdbx\src\src\mdbx.c:mdbx_setup_lck:6315 enter
z:\libs\libmdbx\src\src\mdbx.c:mdbx_setup_lck:6317
z:\libs\libmdbx\src\src\mdbx.c:mdbx_setup_lck:6319
z:\libs\libmdbx\src\src\mdbx.c:mdbx_setup_lck:6323
z:\libs\libmdbx\src\src\lck-windows.c:mdbx_lck_seize:420 enter
z:\libs\libmdbx\src\src\lck-windows.c:mdbx_lck_seize:424
z:\libs\libmdbx\src\src\lck-windows.c:mdbx_lck_seize:426 exit ok
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6573


	z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6575 exit error


z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_open:6681
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_close0:6693 enter
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_close0:6696
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_close0:6705
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_close0:6716
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_close0:6731
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_close0:6736
z:\libs\libmdbx\src\src\mdbx.c:mdbx_env_close0:6742
z:\libs\libmdbx\src\src\lck-windows.c:mdbx_lck_destroy:516 enter
z:\libs\libmdbx\src\src\lck-windows.c:mdbx_lck_destroy:519
z:\libs\libmdbx\src\src\lck-windows.c:mdbx_lck_destroy:523
z:\libs\libmdbx\src\src\lck-windows.c:mdbx_lck_destroy:525

@sss123next
Copy link
Collaborator

it looks like problem inside mdbx_lck_seize or mdbx_setup_lck

@jl452
Copy link

jl452 commented May 3, 2019

any news?

@dartraiden
Copy link
Member Author

dartraiden commented May 3, 2019 via email

@jl452
Copy link

jl452 commented May 4, 2019

@dartraiden

  1. when Dbx_sqlite will be stable? i try use on current alpha and it looks working on wine-4.7 (Staging) ubuntu 18.10
    (but first show contact's big history is sloooow (full profile size after import 274 mb), but repeat (and after next program run too) is fast)
  2. will be convert Dbx_mmap to Dbx_sqlite? or need use create new Dbx_sqlite profile and "import all"?
  3. can i enable Dbx_mmap and work as "not supported, on your fear"? i see Dbx_mmap work for import_plugin

@jl452
Copy link

jl452 commented May 4, 2019

ps: offtop from current: after "import all" in many history setup bug message one or many times in log, and they are out of order:

bug_user, 19.12.2015 14:01:23:
Authorization request from bug_user(bug_user, ):

normal_user1, 08.12.2007 13:49:20:
text1

normal_user2, 08.12.2007 13:49:21:
text2

in my current miranda 0.95.7 #18771 it not show

@dartraiden
Copy link
Member Author

dartraiden commented May 4, 2019

when Dbx_sqlite will be stable?

when we have time to work on it
it contains some bugs for now

will be convert Dbx_mmap to Dbx_sqlite?

will be implemented

can i enable Dbx_mmap and work as "not supported, on your fear"?

nope. mmap works only in Import
some user tried to revive the old mmap, but it has not been updated for a long time therefore incompatible with current stable version

@sss123next
Copy link
Collaborator

ok.

looks like non-trivial time consuming fixing of deprecated thing does not make much sens and better to fix sqlite bugs instead ?

@dartraiden
Copy link
Member Author

dartraiden commented May 13, 2019

dbx_sqlite should be completely rewritten before bugfixing
@georgehazan said that there the base' structure is weird

@sss123next
Copy link
Collaborator

sss123next commented May 13, 2019

#1949 - work on sqlite will be tracked here

@erthink
Copy link
Contributor

erthink commented Feb 17, 2020

looks like problem not in miranda code itself, but in libmdbx instead.

  1. There were errors inside Miranda NG, please see commits log and/or ask @georgehazan.

  2. Wine don't provide NtExtendSection(), but just crash when it calling. Please see issues (wine-hq, and libmdbx and check workaround (commited freshly).

So, this is not libmdbx bug.
If someone doubts or disagrees, please submit a bug report.

@erthink
Copy link
Contributor

erthink commented Apr 12, 2020

@dartraiden ?

@dartraiden
Copy link
Member Author

dbx_mdbx still cannot increase db size under Wine.
This ticket is just reminder, @georgehazan will fix this issue later

@erthink
Copy link
Contributor

erthink commented Nov 23, 2020

Я внес небольшую правку, чтобы размер БД мог меняться под Wine-ом.

Это в принципе рабочее решение, но у него есть недостаток:

  • в Wine отсутствует NtExtendSection(), поэтому увеличить размер БД можно только полностью пере-map-ив файл БД, т.е. какое-то время данные БД будут недоступны в памяти.
  • поэтому при изменении размера libmdbx временно приостанавливает потоки, которые выполняют читающие транзакции.
  • в Миранде это будет работать даже при "перекресном" использовании читающих транзакций с MDBX_NOTLS, так как (теоретически) все обращения к БД должны быть защищены вашей собственной критической секцией и поэтому не должно быть потоков, которые могут обратиться к БД пока данные недоступны (иначе page access violation).
  • однако, при автоматическом изменении размера libmdbx не считает возможным изменять базовый адрес мапинга, чтобы не провоцировать падения приложений.
  • соответственно, если во время unmap+map какой-то работающий поток выделит/займет регион виртуальных адресов где были данные БД, то движок не сможет замепить данные по тому-же адресу и внезапно возвратит MDBX_PANIC.

Кроме этого, для Wine можно попробовать создавать цепочку mmap-секций. Но это потребует работы и отладки, при этом не очевидно насколько такая доработка востребована.

@erthink
Copy link
Contributor

erthink commented Dec 5, 2020

Просьба проверить костыль/workaround в текущем master-е (последние ночные/девелоперские сборки) и отписать результат.

@dartraiden
Copy link
Member Author

dartraiden commented Jan 10, 2021

Ubuntu 20.10, Wine Stable, Miranda x64

При создании профиля вылет, крашлог создаётся пустой, созданную базу размером 1 мегабайт и mdmp прилагаю

new.zip

с боевой базой, которую перекинул из Windows, тоже падает

@dartraiden
Copy link
Member Author

Впрочем, c dbx_sqlite оно падает ровно так же... наводит на мысль, что ошибка не в драйвере.

@erthink
Copy link
Contributor

erthink commented Jan 11, 2021

Просьба сообщить,если (вдруг) в бэктрейсе будет видно падение в libmdbx.
В этом случае постараюсь поправить по-быстрее.

@georgehazan
Copy link
Member

А там сам дьявол не разберет, где оно валится, сплошные цифры, а символы оно не подтянуло

@erthink
Copy link
Contributor

erthink commented Jan 11, 2021

Ну телеграфируйте как будет какая-нибудь информация и/или соображения.
Сам я пока заниматься этим не могу, в ближайшее время нет возможности запускать windows.

@georgehazan
Copy link
Member

а зачем для этого Windows? просто скачать дистрибутив Миранды с символами и пнуть его под wine.

@erthink
Copy link
Contributor

erthink commented Jan 11, 2021

У меня сейчас не x86.

@dartraiden
Copy link
Member Author

Вот, что выдало с WINEDEBUG=relay

winedebug.zip

@sss123next
Copy link
Collaborator

latest versions of miranda-ng works fine on fresh wine-staging

@sss123next
Copy link
Collaborator

с дэфолтами.
сейчас времени совсем нет, в субботу буду заниматься омемой, во второй половине дня, пишите, это тоже можно будет посмотреть.

https://i.imgur.com/KDwtWGr.png

@dartraiden
Copy link
Member Author

Ага, у меня тоже заработало. Странно, буквально 20 дней назад не работало.
Я напишу инструкцию в вики, ок.

@sss123next
Copy link
Collaborator

собственно то же касается и sqlite

> wine64 --version
wine-5.13 (Staging)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants