mysql_close() wartet nicht, bis die letzten Threaded Queries abgeschlossen wurden

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo Community,


    ich hoffe, dass sich jemand mit der Materie MySQL auskennt und mir bei folgendem Problem helfen kann.
    Ich habe die Version R39-3 und bei mir wartet mysql_close(db); nicht, bis meine letzte mysql_tquery()
    erfolgreich abgeschlossen wurde.


    Ich weiß, dass es mal einen Parameter bool:wait in mysql_close gab in einer vergangenen Version, allerdings wurde der entfernt.
    Anscheinend wartet mysql_close jetzt automatisch darauf, dem ist bei mir aber nicht so.


    Zum Test habe ich mysql_close mal auskommentiert und siehe da, jetzt werden die Queries (die sich übrigens im OnGameModeExit-Callback befinden),
    abgeschlossen. Allerdings finde ich diese Lösung etwas unelegant und auf nicht-threaded Queries möchte ich auch nicht umsteigen, ganz zu schweigen von einer anderen mysql-Version.


    Hier noch der Code:

    public OnGameModeExit() {
    for(new i; i<sizeof(interior_data); i++) {
    new query[512];

    new
    Float:x = interior_data[i][interior_pos_int][0],
    Float:y = interior_data[i][interior_pos_int][1],
    Float:z = interior_data[i][interior_pos_int][2],
    Float:r = interior_data[i][interior_pos_int][3],

    intid = interior_data[i][interior_intid_int],
    locked = interior_data[i][interior_locked],
    construction = interior_data[i][interior_construction],
    accepted = interior_data[i][interior_accepted],
    index = interior_data[i][interior_id]
    ;

    // Ich zwischenspeichere die ganzen Werte, weil sonst die Formatierungszeile zu lang werden würde


    if(x == 0 && y == 0 && z == 0) break;

    mysql_format(db, query, sizeof(query), "UPDATE `interiors` SET `pos_int_x`='%f', `pos_int_y`='%f', `pos_int_z`='%f', `pos_int_r`='%f', `intid_int`='%i', `locked`='%i', `construction`='%i', `accepted`='%i', `label`='%s' WHERE `id`='%i'", x, y, z, r, intid, locked, construction, accepted, interior_data[i][interior_label], index);
    mysql_tquery(db, query);
    }
    //mysql_close(db);
    }

  • Ich hab den Fehler bereits auf github gemeldet.


    So wie der Source aussieht (vom Plugin) dürfte der Fehler eigentlich nicht auftreten.
    Woraround.
    Den Server "freezen" bis die queries ausgeführt wurden.


    new tc = tickcount();
    while((tickcount() - tc) < 3000) //pause server for 3 seconds
    { }
    mysql_close(ServerVars[MySQLHandle]);
    so hab ich das gelöst.
    Nicht elegant, aber so funktionierts

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

    Einmal editiert, zuletzt von Akino Kiritani ()