1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

r23735: Second part of the bugfix for #4763

This should coalesce identical adjacent notify records - making the "too large"
bug very rare indeed. Please test.
Jeremy.
This commit is contained in:
Jeremy Allison 2007-07-06 21:46:43 +00:00 committed by Gerald (Jerry) Carter
parent 5be96d09a7
commit 1aaa1f5bbe

View File

@ -50,6 +50,17 @@ struct notify_mid_map {
uint16 mid;
};
static BOOL notify_change_record_identical(struct notify_change *c1,
struct notify_change *c2)
{
/* Note this is deliberately case sensitive. */
if (c1->action == c2->action &&
strcmp(c1->name, c2->name) == 0) {
return True;
}
return False;
}
static BOOL notify_marshall_changes(int num_changes,
struct notify_change *changes,
prs_struct *ps)
@ -58,11 +69,20 @@ static BOOL notify_marshall_changes(int num_changes,
UNISTR uni_name;
for (i=0; i<num_changes; i++) {
struct notify_change *c = &changes[i];
struct notify_change *c;
size_t namelen;
uint32 u32_tmp; /* Temp arg to prs_uint32 to avoid
* signed/unsigned issues */
/* Coalesce any identical records. */
while (i+1 < num_changes &&
notify_change_record_identical(&changes[i],
&changes[i+1])) {
i++;
}
c = &changes[i];
namelen = convert_string_allocate(
NULL, CH_UNIX, CH_UTF16LE, c->name, strlen(c->name)+1,
&uni_name.buffer, True);