LINUX.ORG.RU

Сообщения H3

 

deadlock при использовании QTcpSocket::readyRead()

#include "qt_socket_deadlock_test.h"
#include <QtWidgets/QApplication>
#include <QTcpSocket>
#include <QTcpServer>
#include <QDebug>
#include <QMessageBox>

#define REPRODUCE_ISSUE


int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	a.setQuitOnLastWindowClosed(false);
	qt_socket_deadlock_test test;
	test.show();
	QTcpServer server;
	QObject::connect(&server, &QTcpServer::newConnection, [&]() {

		QTcpSocket *socket = server.nextPendingConnection();
		QObject::connect(socket, &QTcpSocket::readyRead, [=]() {

			QByteArray data = socket->readAll();
			qDebug() << data;						
#ifdef REPRODUCE_ISSUE
			QMessageBox::information(0, QString("Data received"),
QString::fromUtf8(data), QMessageBox::StandardButton::Ok);
#else
			getchar();		
#endif
		});
	});
	server.listen(QHostAddress::LocalHost, 8888);		
	return a.exec();
}

Почему обработчик readyRead не вызывается повторно, если данные были получены пока QMessageBox не был закрыт, но вызывается, если использовать getchar?

В обоих случаях блокируется поток UI, но событие получения данных теряется только при использовании QMessageBox.

 ,

H3
()

Вопрос по правильной сборке GCC+GLibc, pass1

Здравствуйте.

Собираю тулчейн с самого первого этапа. Возникла проблема при сборке GLibc: компоновщик ругается на отсутствие библиотеки libgcc_s. Поскольку GCC с опцией --enable-shared=libgcc не хочет собираться, ругаясь на отсутствие libc, получается замкнутый круг: для сборки GLibc она требует libgcc_s.so.1, а чтобы её собрать, нужен libc. С опцией --disable-shared GCC собирается.

Привожу ключи для configure, с которыми собираю:

GCC-4.7.1: ../../src/gcc-4.7.1/configure --target=$TARGET \

--prefix=$TOOLS \

--with-sysroot=$SYSROOT \

--without-headers \

--with-newlib \ # причем это должно предоставить libc, но почему-то не делает и выдает ошибку при сборке libgcc_s

--with-local-prefix=$TOOLS \

--with-native-system-header-dir=$TOOLS/include \

--enable-shared=libgcc --disable-multilib --disable-threads \

--disable-nls --without-cloog --disable-libmudflap \

--disable-libquadmath --disable-libssp --disable-libgomp \

--disable-werror --disable-decimal-float \

--enable-languages=c \

--with-mpfr-include=$PWD/../../src/gcc-4.7.1/mpfr/src \

--with-mpfr-lib=$PWD/mpfr/src/.libs


GLibc-2.16.0: ../../src/glibc-2.16.0/configure --prefix=$TOOLS \

--with-headers=$TOOLS/include \

--enable-add-ons --enable-kernel=3.4.4 \

--build=$(../../src/glibc-2.16.0/scripts/config.guess) \

--disable-profile \

--host=$TARGET \

libc_cv_forced_unwind=yes \

libc_cv_ctors_header=yes \

libc_cv_c_cleanup=yes

Переменные: SYSROOT=/home/h3/newroot

TOOLS=$SYSROOT/tools

TARGET=i686-new-linux-gnu

PATH=$TOOLS/bin:$PATH
Подозреваю, для успешной сборки GLibc, не хватает какого-то ключа, вот только какого именно?

 ,

H3
()

RSS подписка на новые темы