Obawiam sie ze nic z tego. Aplikacja hosta sie nie uruchamia z gdb. :/ Czegokolwiek bym nie sprobowal, program staje w momencie inicjalizacji OpenGL. Jakis inny pomysl?
Moze pomoze listing problematycznej funkcji:
void *SQL_AuthThread(void *qp) {
MYSQL_RES *res;
MYSQL_ROW row;
t_hash hash;
char *cmdbuf;
char hashstr[8 * 5 + 1]; // kazdy z 4 calkowitych do 8 znakow + null
my_ulonglong numrows;
authQueryData_t *q = (authQueryData_t *)qp;
if (!SQL_connection) {
printFunc("[SQL]: Proba autoryzacji przy niezainicjowanym polaczeniu!\n");
authSuccessFunc(q->clientNum);
q->self->inuse = 0;
pthread_exit(NULL);
}
// hashujemy haslo
bnet_hash(&hash, sizeof(hash), q->password);
strncpy(&hashstr[0], hash_get_str(hash), sizeof(hashstr));
// wysylamy zapytanie do bazy MySQL
cmdbuf = (char *)malloc(256); // jesli nie zalokujemy pamieci, sprintf zwroci NULL
sprintf(cmdbuf, "SELECT uid, acct_passhash1 FROM %sBNET WHERE acct_username='%s'", tablePrefix, q->username);
mysql_query(SQL_connection, cmdbuf);
free((void *)cmdbuf);
// pobieramy wynik
res = mysql_store_result(SQL_connection);
if (mysql_errno(SQL_connection)) {
printFunc("[SQL]: Blad przy pobieraniu wyniku zapytania: %s", mysql_error(SQL_connection));
switch (mysql_errno(SQL_connection)) {
case CR_SERVER_GONE_ERROR:
printFunc(" (wysylanie zapytania nie powiodlo sie)\n");
break;
case CR_SERVER_LOST:
printFunc(" (brak odpowiedzi na zapytanie)\n");
break;
default:
printFunc("\n");
}
q->self->inuse = 0;
mysql_free_result(res);
pthread_exit(NULL);
}
// dobieramy sie do danych
numrows = mysql_num_rows(res);
if (numrows == 1) { // mamy naszego usera
//while ((row = mysql_fetch_row(res))) {
row = mysql_fetch_row(res);
if (mysql_errno(SQL_connection)) {
printFunc("[SQL]: Blad przy pobieraniu wiersza: %s\n", mysql_error(SQL_connection));
q->self->inuse = 0;
mysql_free_result(res);
pthread_exit(NULL);
}
if (!STRICMP(hashstr, row[1])) {
q->userid = atoi(row[0]);
authSuccessFunc(q->clientNum);
q->self->inuse = 0;
mysql_free_result(res);
printFunc("Exiting thread\n");
pthread_exit(NULL);
}
//}
q->self->inuse = 0;
authFailureFunc(q->clientNum);
mysql_free_result(res);
pthread_exit(NULL);
} else if (numrows <= 0) {
q->self->inuse = 0;
authFailureFunc(q->clientNum);
mysql_free_result(res);
pthread_exit(NULL);
} else { // to sie nie powinno zdarzyc - 2 userow o tych samych nickach? odrzuc i wypisz ostrzezenie w konsoli
printFunc("[SQL]: UWAGA - %d uzytkownikow o tych samych danych: %s:%s!\n", numrows, q->username, q->password);
q->self->inuse = 0;
authFailureFunc(q->clientNum);
mysql_free_result(res);
pthread_exit(NULL);
}
// tu nigdy nie powinnismy dojsc
mysql_free_result(res);
q->self->inuse = 0;
pthread_exit(NULL);
return NULL; // zeby kompilator nie ostrzegal
}
Przy udanej probie logowania dostaje komunikat Exiting thread i w tym momencie program wisi. Przypominam, ze to DLL, a nie samodzielny program.
<EDIT>Napisalem testowy program konsolowy, w ktorym wszystko dziala jak trzeba. Co jest?</EDIT>