Если вы хотите минимизировать дублирующийся код, создайте обратный вызов как объект класса и используйте его для обоих вызовов (что-то вроде этого):
private val callback = object : Callback<DataModel> {
override fun onResponse(call: Call<DataModel>?, response: Response<DataModel>?) {
// handler code
}
override fun onFailure(call: Call<DataModel>?, throwable: Throwable?) {
// error handler code
}
}
private fun fetchFirst() {
if (UseDataApi_1) {
dataApi.getData_1(getQueryParams()).enqueue(callback)
} else {
dataApi.getData_2(getQueryParams()).enqueue(callback)
}
}
Просмотр исходных кодов ядра за последний час показывает, что это нормально: ни определение struct vm_operations_struct , ни код между handle_mm_fault () и вызовом vma-> vm_ops -> ошибка в __ do_fault () содержит предостерегающие заявления по этому поводу, и немногие обработчики ошибок ->, на которые я смотрел, тоже не беспокоились об этом ...
... Я думаю, что главное, что вам нужно избегать бесконечной рекурсии путем повторного сбоя по тому же адресу, но это, вероятно, произойдет, только если стек ядра находится в вашей vma что, скорее всего, не произойдет?
Это абсолютно правильно. На самом деле, вы даже можете спать.
Но вы можете сделать это только после того, как эта строка пройдена, так как вы окажетесь в неатомарном контексте.