Skip to content

Issues with preemption in one resource when the arrival is enqueued in another #206

Closed
@Enchufa2

Description

@Enchufa2

As @thigger noted in #202, an arrival may end up in two queues (potentially, many more) due to preemption.

For example, this crashes the session: the arrival is dequeued in a resource while enqueued in a previous one.

library(simmer)

lprio <- trajectory() %>%
  seize("one") %>%           # "one" seized
  seize("two") %>%           # enqueued in "two"
  timeout(10) %>%
  release_all()

hprio <- trajectory() %>%
  seize("one") %>%           # preempts lprio in "one"
  set_capacity("two", 1) %>% # dequeues lprio in "two" -> crash
  timeout(100) %>%
  release_all()

simmer(verbose=TRUE) %>%
  add_resource("one", 1, preemptive=TRUE) %>%
  add_resource("two", 0) %>%
  add_generator("lprio", lprio, at(0), priority=0) %>%
  add_generator("hprio", hprio, at(1), priority=1) %>%
  run()

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions