/*
- Unix SMB/Netbios implementation.
- Version 1.9.
+ Unix SMB/CIFS implementation.
NBT netbios library routines
Copyright (C) Andrew Tridgell 1994-1998
Copyright (C) Luke Kenneth Casson Leighton 1994-1998
extern int ClientNMB;
-extern int DEBUGLEVEL;
-
-extern pstring scope;
-extern struct in_addr ipzero;
-
int num_response_packets = 0;
/***************************************************************************
Add an expected response record into the list
**************************************************************************/
-void add_response_record(struct subnet_record *subrec,
+static void add_response_record(struct subnet_record *subrec,
struct response_record *rrec)
{
struct response_record *rrec2;
if(rrec->userdata)
{
- if(rrec->userdata->free_fn)
- (*rrec->userdata->free_fn)(rrec->userdata);
- else
- free((char *)rrec->userdata);
+ if(rrec->userdata->free_fn) {
+ (*rrec->userdata->free_fn)(rrec->userdata);
+ } else {
+ ZERO_STRUCTP(rrec->userdata);
+ SAFE_FREE(rrec->userdata);
+ }
}
/* Ensure we can delete. */
rrec->packet->locked = False;
free_packet(rrec->packet);
- free((char *)rrec);
+ ZERO_STRUCTP(rrec);
+ SAFE_FREE(rrec);
num_response_packets--; /* count of total number of packets still around */
}
**************************************************************************/
struct response_record *make_response_record( struct subnet_record *subrec,
- struct packet_struct *p,
- response_function resp_fn,
- timeout_response_function timeout_fn,
- success_function success_fn,
- fail_function fail_fn,
- struct userdata_struct *userdata)
+ struct packet_struct *p,
+ response_function resp_fn,
+ timeout_response_function timeout_fn,
+ success_function success_fn,
+ fail_function fail_fn,
+ struct userdata_struct *userdata)
{
struct response_record *rrec;
struct nmb_packet *nmb = &p->packet.nmb;
return NULL;
}
- bzero((char *)rrec, sizeof(*rrec));
+ memset((char *)rrec, '\0', sizeof(*rrec));
rrec->response_id = nmb->header.name_trn_id;
if((rrec->userdata = (*userdata->copy_fn)(userdata)) == NULL)
{
DEBUG(0,("make_response_queue_record: copy fail for userdata.\n"));
- free(rrec);
+ ZERO_STRUCTP(rrec);
+ SAFE_FREE(rrec);
return NULL;
}
}
malloc(sizeof(struct userdata_struct)+userdata->userdata_len)) == NULL)
{
DEBUG(0,("make_response_queue_record: malloc fail for userdata.\n"));
- free(rrec);
+ ZERO_STRUCTP(rrec);
+ SAFE_FREE(rrec);
return NULL;
}
rrec->userdata->copy_fn = userdata->copy_fn;
rrec->repeat_count = 3; /* 3 retries */
rrec->repeat_time = time(NULL) + rrec->repeat_interval; /* initial retry time */
+ /* This packet is not being processed. */
+ rrec->in_expiration_processing = False;
+
/* Lock the packet so we won't lose it while it's on the list. */
p->locked = True;