summaryrefslogtreecommitdiffstats
path: root/sys/netatm/atm_aal5.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netatm/atm_aal5.c')
-rw-r--r--sys/netatm/atm_aal5.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/sys/netatm/atm_aal5.c b/sys/netatm/atm_aal5.c
index 2367eb9..2a5e1e3 100644
--- a/sys/netatm/atm_aal5.c
+++ b/sys/netatm/atm_aal5.c
@@ -78,7 +78,7 @@ static int atm_aal5_disconnect(struct socket *);
static int atm_aal5_shutdown(struct socket *);
static int atm_aal5_send(struct socket *, int, KBuffer *,
struct sockaddr *, KBuffer *, struct thread *td);
-static int atm_aal5_abort(struct socket *);
+static void atm_aal5_abort(struct socket *);
static int atm_aal5_control(struct socket *, u_long, caddr_t,
struct ifnet *, struct thread *td);
static int atm_aal5_sense(struct socket *, struct stat *);
@@ -204,6 +204,11 @@ static Atm_attributes atm_aal5_defattr = {
;
#endif /* DIAGNOSTIC */
+#define ATM_INTRO_NOERR(f) \
+ int s; \
+ s = splnet(); \
+ ;
+
#define ATM_OUTRO() \
/* \
* Drain any deferred calls \
@@ -213,6 +218,14 @@ static Atm_attributes atm_aal5_defattr = {
return (err); \
;
+#define ATM_OUTRO_NOERR() \
+ /* \
+ * Drain any deferred calls \
+ */ \
+ STACK_DRAIN(); \
+ (void) splx(s); \
+ ;
+
#define ATM_RETERR(errno) { \
err = errno; \
goto out; \
@@ -546,16 +559,16 @@ out:
* errno error processing request - reason indicated
*
*/
-static int
+static void
atm_aal5_abort(so)
struct socket *so;
{
- ATM_INTRO("abort");
+ ATM_INTRO_NOERR("abort");
so->so_error = ECONNABORTED;
- err = atm_sock_detach(so);
+ atm_sock_detach(so);
- ATM_OUTRO();
+ ATM_OUTRO_NOERR();
}
OpenPOWER on IntegriCloud