fix flag clear in not exist endpoint.
@@ -423,6 +423,37 @@ | ||
423 | 423 | return ret; |
424 | 424 | } |
425 | 425 | |
426 | +LOCAL Bool http_connector_isexistwaiting(http_connector_t *connector) | |
427 | +{ | |
428 | + http_reqentry_t *entry; | |
429 | + http_recdictiterator_t iter; | |
430 | + Bool cont, ret = False; | |
431 | + | |
432 | + http_reqdictiterator_initialize(&iter, connector->dict); | |
433 | + for (;;) { | |
434 | + cont = http_reqdictiterator_next(&iter, &entry); | |
435 | + if (cont == False) { | |
436 | + break; | |
437 | + } | |
438 | + if (entry->status == WAITING_TRANSPORT) { | |
439 | + ret = True; | |
440 | + break; | |
441 | + } else if (entry->status == SENDING_REQUEST) { | |
442 | + ret = True; | |
443 | + break; | |
444 | + } else if (entry->status == WAITING_RESPONSE) { | |
445 | + ret = True; | |
446 | + break; | |
447 | + } else if (entry->status == RECEIVING_RESPONSE) { | |
448 | + ret = True; | |
449 | + break; | |
450 | + } | |
451 | + } | |
452 | + http_reqdictiterator_finalize(&iter); | |
453 | + | |
454 | + return ret; | |
455 | +} | |
456 | + | |
426 | 457 | LOCAL W http_connector_waitreceiving(http_connector_t *connector, TMOUT tmout) |
427 | 458 | { |
428 | 459 | W ret = 0; |
@@ -466,11 +497,11 @@ | ||
466 | 497 | EXPORT W http_connector_waitconnection(http_connector_t *connector, TMOUT tmout) |
467 | 498 | { |
468 | 499 | W err; |
469 | - Bool evt = False; | |
500 | + Bool evt = False, exist; | |
470 | 501 | |
471 | - err = wai_flg(connector->flg, HTTP_CONNECTOR_FLAG_REQUEST, WF_AND, tmout); | |
502 | + err = wai_flg(connector->flg, HTTP_CONNECTOR_FLAG_REQUEST, WF_AND|NOCLR, tmout); | |
472 | 503 | if (err < 0) { |
473 | - return 0; | |
504 | + return err; | |
474 | 505 | } |
475 | 506 | |
476 | 507 | HTTP_CONNECTOR_ENTER_CRITICAL_SECTION_RET_ERR(connector); |
@@ -484,6 +515,11 @@ | ||
484 | 515 | } |
485 | 516 | http_transport_releaseunusedendpoint(connector->transport); |
486 | 517 | |
518 | + exist = http_connector_isexistwaiting(connector); | |
519 | + if (exist == False) { | |
520 | + clr_flg(connector->flg, HTTP_CONNECTOR_FLAG_CLEARMASK_REQUEST); | |
521 | + } | |
522 | + | |
487 | 523 | err = http_connector_waitreceiving(connector, tmout); |
488 | 524 | HTTP_CONNECTOR_LEAVE_CRITICAL_SECTION(connector); |
489 | 525 | if (err < 0) { |