in buckets/allocator.c [469:526]
void serf_debug__bucket_destroy(const serf_bucket_t *bucket)
{
#ifdef SERF_DEBUG_BUCKET_USE
track_state_t *track = bucket->allocator->track;
read_status_t *rs = find_read_status(track, bucket, 0);
if (rs != NULL
&& !APR_STATUS_IS_EOF(rs->last)
&& !SERF_BUCKET_READ_ERROR(rs->last)) {
/* The bucket was destroyed before it was read to completion. */
serf_bucket_t *bkt;
/* Special exception for socket buckets. If a connection remains
* open, they are not read to completion.
*/
if (SERF_BUCKET_IS_SOCKET(bucket))
return;
/* Ditto for SSL Decrypt buckets. */
if (SERF_BUCKET_IS_SSL_DECRYPT(bucket))
return;
/* Ditto for SSL Encrypt buckets. */
if (SERF_BUCKET_IS_SSL_ENCRYPT(bucket))
return;
/* Ditto for barrier buckets. */
if (SERF_BUCKET_IS_BARRIER(bucket))
return;
if (SERF_BUCKET_IS_AGGREGATE(bucket)) {
apr_status_t status;
const char *data;
apr_size_t len;
serf_bucket_aggregate_hold_open(bucket, NULL, NULL);
status = serf_bucket_read(bucket, SERF_READ_ALL_AVAIL,
&data, &len);
if (APR_STATUS_IS_EOF(status) && !len)
return;
}
bkt = serf_bucket_read_bucket((serf_bucket_t*)bucket,
&serf_bucket_type_ssl_encrypt);
if (bkt != NULL) {
serf_bucket_destroy(bkt);
return;
}
abort();
}
#endif
}