Task + DbTransaction DbConnection error

Hi guys,

I would like to know if anybody could help me.
I have a genserver that calls a TaskSupervisor to start tasks like this:

 task =
        fn -> Toto.bar() end

    Process.send_after(self(), {:kill, task}, state.task_timeout)

and a handle_info like this:

def handle_info({:kill, task}, %{tasks: tasks} = state) do
if tasks[task.ref] do
      Task.shutdown(task, :brutal_kill)
      {:noreply, %{state | tasks: Map.delete(tasks, task.ref)}}
      {:noreply, state}

The toto.foo contains a transaction like this:

  def foo(params) do
    Repo.transaction(fn ->
      ota_request = Repo.insert!(%Foo{} |> Foo.create_changeset(params))

In this case , I got in the terminate callback of the Genserver:

scheduler terminated: {{:shutdown,
    message: "client #PID<0.698.0> exited",
    reason: :error,
    severity: :error
 {DBConnection.Holder, :checkout,
      log: #Function<13.1473765/1 in Ecto.Adapters.SQL.with_log/3>,
      source: "uicc_provisionings",
      cast_params: [nil, nil, ~N[2023-06-22 11:12:24], "icc_id_3529"],
      repo: SimManager.Repo,
      timeout: 15000,
      pool: DBConnection.Ownership,
      pool_size: 10

I found that the task is the exited client. And the problem disappears when I remove the transaction.

Hard to say 100% without real code, but my suspicion is that the Task ends up sharing a database connection with the GenServer, then brutal_killing the Task leaves the connection in an unusable state.