The FreeRADIUS server
$Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
src
lib
bio
fd_write.h
Go to the documentation of this file.
1
/*
2
* Common finalization code for the write functions.
3
*
4
* This is in a header file because of "goto retry" in fd_errno.h.
5
*
6
* @todo - do we want the callbacks to notify the _previous_ BIO in the chain? That way the top-level
7
* BIO can notify the application.
8
*/
9
if
(rcode > 0) {
10
int
error;
11
12
/*
13
* We weren't blocked, but we are now.
14
*/
15
if
(!
my
->info.write_blocked) {
16
if
((
size_t
) rcode == size) {
17
return
rcode;
18
}
19
20
fr_assert
((
size_t
) rcode < size);
21
22
/*
23
* Set the flag, and tell the other BIOs that we're blocked.
24
*/
25
my
->info.write_blocked =
true
;
26
27
error =
fr_bio_write_blocked
((
fr_bio_t
*)
my
);
28
if
(error < 0)
return
error;
29
30
return
rcode;
31
}
32
33
/*
34
* We were blocked. We're still blocked if we wrote _less_ than the amount of requested data.
35
* If we wrote all of the data which was requested, then we're unblocked.
36
*/
37
my
->info.write_blocked = ((
size_t
) rcode == size);
38
39
/*
40
* Call the "resume" function if we transitioned to being unblocked.
41
*/
42
if
(!
my
->info.write_blocked &&
my
->cb.write_resume) {
43
error =
my
->cb.write_resume((
fr_bio_t
*)
my
);
44
if
(error < 0)
return
error;
45
}
46
47
return
rcode;
48
}
49
50
if
(rcode == 0)
return
rcode;
51
52
#undef flag_blocked
53
#define flag_blocked write_blocked
54
#include "
fd_errno.h
"
fr_bio_s
Definition:
base.h:112
fd_errno.h
my
fr_bio_shutdown & my
Definition:
fd_errno.h:59
fr_bio_write_blocked
int fr_bio_write_blocked(fr_bio_t *bio)
Internal BIO function to tell all BIOs that it's blocked.
Definition:
base.c:293
size_t
unsigned long int size_t
Definition:
merged_model.c:25
fr_assert
fr_assert(0)
Generated by
1.9.1