mirror of
https://github.com/ceph/ceph
synced 2025-02-24 19:47:44 +00:00
rgw: RGWCoroutine::set_sleeping() checks for null stack
users of the RGWOmapAppend coroutine don't manage the lifetime of its underlying coroutine stack, so end up making calls on RGWOmapAppend after its stack goes away. this null check is a band-aid, and there are still several other calls in RGWCoroutine that don't check for null stack Fixes: https://tracker.ceph.com/issues/49302 Signed-off-by: Or Friedmann <ofriedma@redhat.com> Signed-off-by: Casey Bodley <cbodley@redhat.com>
This commit is contained in:
parent
5720cca2f8
commit
3f0f831d66
@ -143,15 +143,20 @@ RGWCoroutine::~RGWCoroutine() {
|
||||
|
||||
void RGWCoroutine::init_new_io(RGWIOProvider *io_provider)
|
||||
{
|
||||
ceph_assert(stack); // if there's no stack, io_provider won't be uninitialized
|
||||
stack->init_new_io(io_provider);
|
||||
}
|
||||
|
||||
void RGWCoroutine::set_io_blocked(bool flag) {
|
||||
stack->set_io_blocked(flag);
|
||||
if (stack) {
|
||||
stack->set_io_blocked(flag);
|
||||
}
|
||||
}
|
||||
|
||||
void RGWCoroutine::set_sleeping(bool flag) {
|
||||
stack->set_sleeping(flag);
|
||||
if (stack) {
|
||||
stack->set_sleeping(flag);
|
||||
}
|
||||
}
|
||||
|
||||
int RGWCoroutine::io_block(int ret, int64_t io_id) {
|
||||
@ -159,6 +164,9 @@ int RGWCoroutine::io_block(int ret, int64_t io_id) {
|
||||
}
|
||||
|
||||
int RGWCoroutine::io_block(int ret, const rgw_io_id& io_id) {
|
||||
if (!stack) {
|
||||
return 0;
|
||||
}
|
||||
if (stack->consume_io_finish(io_id)) {
|
||||
return 0;
|
||||
}
|
||||
@ -168,7 +176,9 @@ int RGWCoroutine::io_block(int ret, const rgw_io_id& io_id) {
|
||||
}
|
||||
|
||||
void RGWCoroutine::io_complete(const rgw_io_id& io_id) {
|
||||
stack->io_complete(io_id);
|
||||
if (stack) {
|
||||
stack->io_complete(io_id);
|
||||
}
|
||||
}
|
||||
|
||||
void RGWCoroutine::StatusItem::dump(Formatter *f) const {
|
||||
|
Loading…
Reference in New Issue
Block a user