diff --git a/src/server/mysql.c b/src/server/mysql.c --- a/src/server/mysql.c +++ b/src/server/mysql.c @@ -51,7 +51,7 @@ distrend_mysql_result_t mysqlQuery(distr check if it returned NULL or not. @return 0 on success */ -int mysqlResultFree(distrend_mysql_result_t result); +int mysqlResultFree(distrend_mysql_conn_t conn, distrend_mysql_result_t result); /** reads an integer mysql field value @@ -161,7 +161,8 @@ distrend_mysql_result_t mysqlQuery(distr if(mysql_ping(conn->mysqlconn)) { - fprintf(stderr, "MySQL connection broken, and reconnect is disabled!\n"); + fprintf(stderr, "mysql_ping() failed: %s\n", mysql_error(conn->mysqlconn)); + return NULL; } fprintf(stderr,"Querying... "); @@ -205,6 +206,8 @@ distrend_mysql_result_t mysqlQuery(distr distrenresult = malloc(sizeof(struct distrend_mysql_result)); if(!distrenresult) { + while(mysql_fetch_row(result)) + ; mysql_free_result(result); return NULL; } @@ -215,28 +218,45 @@ distrend_mysql_result_t mysqlQuery(distr return distrenresult; } -int mysqlResultFree(distrend_mysql_result_t result) +int mysqlResultFree(distrend_mysql_conn_t conn, distrend_mysql_result_t result) { size_t counter; + MYSQL_RES *mysqlresult; if(!result) - return 0; - + { + fprintf(stderr, "mysqlResultFree(): warning, passed NULL parameter\n"); + return 0; + } + if(result->pointlesscheck != FORTY_TWO) fprintf(stderr, "%s:%d: I didn't get the type of handle I wanted\n", __FILE__, __LINE__); + mysqlresult = result->mysqlresult; + free(result); + /** Must flush the resultset buffer. */ for(counter = 0; - mysql_fetch_row(result->mysqlresult); + mysql_fetch_row(mysqlresult); counter ++) ; if(counter) fprintf(stderr, "Calling function did not flush %d rows\n", (int)counter); - mysql_free_result(result->mysqlresult); - free(result); + while(mysql_more_results(conn->mysqlconn)) + { + fprintf(stderr, "flushing an extraneous result set\n"); + mysql_next_result(conn->mysqlconn); + mysqlresult = mysql_use_result(conn->mysqlconn); + if(mysqlresult) + { + while(mysql_fetch_row(mysqlresult)) + ; + mysql_free_result(mysqlresult); + } + } return 0; } @@ -295,14 +315,14 @@ int find_jobframe(distrend_mysql_conn_t row = mysql_fetch_row(result->mysqlresult); if(!row) { - mysqlResultFree(result); + mysqlResultFree(conn, result); return 1; } rtn = distrend_mysql_getint(row, 0, (int32_t *)jobkey); rtn += distrend_mysql_getint(row, 1, framenum); - - mysqlResultFree(result); + + mysqlResultFree(conn, result); return rtn; } diff --git a/src/server/mysql.h b/src/server/mysql.h --- a/src/server/mysql.h +++ b/src/server/mysql.h @@ -66,10 +66,7 @@ int change_job_priority(distrend_mysql_c */ int find_jobframe(distrend_mysql_conn_t conn, int32_t slaveKey, jobnum_t *jobKey, int32_t *frameNum); -/** - Slave Authenticator: Checks to see if a slave's ID and password match -*/ -int auth_slave(distrend_mysql_conn_t conn, int32_t slavekey, int32_t slavepass); + #endif /* MYSQL_H_ */