This will ensure that the data layer releases anything previously allocated.
si->flags &= ~SI_FL_CAP_SPLICE;
fd_delete(si_fd(si));
+ si_data_close(si);
if (si->release)
si->release(si);
case SI_ST_TAR:
si->state = SI_ST_DIS;
+ si_data_close(si);
if (si->release)
si->release(si);
default:
si->state = SI_ST_DIS;
si->exp = TICK_ETERNITY;
+ si_data_close(si);
if (si->release)
si->release(si);
return;
si->state = SI_ST_DIS;
si->exp = TICK_ETERNITY;
+ si_data_close(si);
if (si->release)
si->release(si);
}
si->state = SI_ST_DIS;
/* fall through */
+ si_data_close(si);
if (si->release)
si->release(si);
default: