Browse Prior Art Database

Progress switches

IP.com Disclosure Number: IPCOM000015541D
Original Publication Date: 2002-Jul-01
Included in the Prior Art Database: 2003-Jun-20
Document File: 2 page(s) / 49K

Publishing Venue

IBM

Abstract

When software products hangs, it can be very useful to know what each thread and process is doing and or waiting for. If a software products crashes, it can also be very useful to know what it was doing at the time of the crash.

This text was extracted from a PDF file.
This is the abbreviated version, containing approximately 54% of the total text.

Page 1 of 2

Progress switches

    When software products hangs, it can be very useful to know what each thread and process is doing and or waiting for. If a software products crashes, it can also be very useful to know what it was doing at the time of the crash.

      A progress switch is a thread or process specific structure containing information that describes what the thread or process is currently doing. Using this invention, the complex interdependence of a software hang (i.e., which threads/processes are waiting for which threads/process, which threads/processes are waiting for the OS, etc) can be quickly identified and even resolved.

The basic structure for a progress switch looks like this:

typedef struct progressSwitch {

Uint action;

Uint flags;

Uint dataType;

size_t dataSize;

void *data;

pid_t processID;

tid_t threadID;

char taskName[MAX_TASK_NAME];

struct progressSwitch *waitingForThis; } progressSwitch_t;

      The action member would contain a "well known" value that would correspond to a specific action such as:

waiting for a read from a socket authenticating user waiting on a wait/post area

      There can be any number of actions up to the limit of the data type (Uint in this case is a native size for 32 or 64 bit platforms).

      The flags member would contain various bit-wise information about whether the current running action is blocking, working, interruptible, etc.

      The dataType member would contain a "well known" value that describes the type of data associated with the current action. If the thread or process is reading from a socket, the dataType member state the data member is describing a socket descriptor or more detailed socket information.

The dataSize member simply contains the size of the data for the progress switch.

      The data member is a pointer to the data for the progress switch. This could point to any type of information including complex structures or simple identifiers. Using the network example, this would probably be the actual socket descriptor or the detailed socket information. The dataType describes the type of data that the data pointer points to.

      The processID member is the process identifier of the process that is using this particular progress switch.

The threadID member is the thread identifier of the thread that is using this particular progress

switch.

1

Page 2 of 2

      If a software product is hanging, a...