unbufcall(D3)unbufcall(D3)NAMEunbufcall - cancel a pending bufcall request
SYNOPSIS
#include <sys/stream.h>
#include <sys/ddi.h>
void unbufcall(toid_t id);
Arguments
id Non-zero identifier returned from a prior call to bufcall(D3)
or esbbcall(D3).
DESCRIPTIONunbufcall cancels the pending bufcall or esbbcall request specified by
id.
Return Values
None
USAGE
If unbufcall is called while any function called by the pending bufcall
or esbbcall request is running, the call to unbufcall has no effect.
Level
Base or Interrupt.
Synchronization Constraints
Does not sleep.
Driver-defined basic locks, read/write locks, and sleep locks may not be
held across calls to this function.
Example
See bufcall for the other half of this example.
In the module close routine, if a bufcall request is pending (line 14),
we cancel it (line 15). Otherwise, if a itimeout request is pending
(line 16), we cancel it (line 17). Then the m_type field in the module's
private data structure is set to 0, indicating no pending bufcall or
itimeout.
1 struct mod {
2 long m_id;
3 char m_type;
...
4 };
5 #define TIMEOUT 1
6 #define BUFCALL 2
...
7 modclose(q, flag, crp)
8 queue_t *q;
9 int flag;
Page 1
unbufcall(D3)unbufcall(D3)
10 cred_t *crp;
11 {
12 struct mod *modp;
13 modp = (struct mod *)q->q_ptr;
14 if (modp->m_type == BUFCALL)
15 unbufcall(modp->m_id);
16 else if (modp->m_type == TIMEOUT)
17 untimeout(modp->m_id);
18 modp->m_type = 0;
...
REFERENCESbufcall(D3), esbbcall(D3)
Page 2