- Using Restarts:
  - When is a restart used?
    - Restarts are used when changes to one primitive affect other primitives as well.
    - The most common example is changing the frame size of a pipe while the pipe is running.
      - When the writer of a pipe needs to change one of the fundamental attributes of the pipe it must use a restart since all of the readers of that pipe are also affected.
  - How do I know if a restart is needed?
    - Only the primitive initiating the restart needs to be told that a restart is needed.
    - Any subsequent primitives reading a pipe that was written by a primitive that is being restarted are automatically notified that a restart is needed.
  - Is there a way to alter the way a primitive handles a restart?
    - Yes, this will be discussed in the next few pages.
  - Will any data be lost?
    - No, data will not be lost during a pipe restart, except where a primitive explicitly discards the data.
      - Some primitives only work with a fixed transfer length and may discard data when a restart lies in between two transfer lengths.
  - Is there a way to alter the way a primitive handles a restart?
    - Yes, this will be discussed in the next few pages.