Deleted Added
full compact
uipc_sockbuf.c (1817) uipc_sockbuf.c (3308)
1/*
2 * Copyright (c) 1982, 1986, 1988, 1990, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * @(#)uipc_socket2.c 8.1 (Berkeley) 6/10/93
1/*
2 * Copyright (c) 1982, 1986, 1988, 1990, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * @(#)uipc_socket2.c 8.1 (Berkeley) 6/10/93
34 * $Id$
34 * $Id: uipc_socket2.c,v 1.3 1994/08/02 07:43:08 davidg Exp $
35 */
36
37#include <sys/param.h>
38#include <sys/systm.h>
39#include <sys/proc.h>
40#include <sys/file.h>
41#include <sys/buf.h>
42#include <sys/malloc.h>
43#include <sys/mbuf.h>
44#include <sys/protosw.h>
35 */
36
37#include <sys/param.h>
38#include <sys/systm.h>
39#include <sys/proc.h>
40#include <sys/file.h>
41#include <sys/buf.h>
42#include <sys/malloc.h>
43#include <sys/mbuf.h>
44#include <sys/protosw.h>
45#include <sys/stat.h>
45#include <sys/socket.h>
46#include <sys/socketvar.h>
46#include <sys/socket.h>
47#include <sys/socketvar.h>
48#include <sys/signalvar.h>
47
49
48void soqinsque __P((struct socket *, struct socket *, int));
49void sowakeup __P((struct socket *, struct sockbuf *));
50void sbrelease __P((struct sockbuf *));
51void sbappendrecord __P((struct sockbuf *, struct mbuf *));
52void sbcompress __P((struct sockbuf *, struct mbuf *, struct mbuf *));
53void sbflush __P((struct sockbuf *));
54void sbdrop __P((struct sockbuf *, int));
55
56/*
57 * Primitive routines for operating on sockets and socket buffers
58 */
59
60/* strings for sleep message: */
61char netio[] = "netio";
62char netcon[] = "netcon";
63char netcls[] = "netcls";

--- 230 unchanged lines hidden (view full) ---

294int
295sb_lock(sb)
296 register struct sockbuf *sb;
297{
298 int error;
299
300 while (sb->sb_flags & SB_LOCK) {
301 sb->sb_flags |= SB_WANT;
50/*
51 * Primitive routines for operating on sockets and socket buffers
52 */
53
54/* strings for sleep message: */
55char netio[] = "netio";
56char netcon[] = "netcon";
57char netcls[] = "netcls";

--- 230 unchanged lines hidden (view full) ---

288int
289sb_lock(sb)
290 register struct sockbuf *sb;
291{
292 int error;
293
294 while (sb->sb_flags & SB_LOCK) {
295 sb->sb_flags |= SB_WANT;
302 if (error = tsleep((caddr_t)&sb->sb_flags,
296 error = tsleep((caddr_t)&sb->sb_flags,
303 (sb->sb_flags & SB_NOINTR) ? PSOCK : PSOCK|PCATCH,
297 (sb->sb_flags & SB_NOINTR) ? PSOCK : PSOCK|PCATCH,
304 netio, 0))
298 netio, 0);
299 if (error)
305 return (error);
306 }
307 sb->sb_flags |= SB_LOCK;
308 return (0);
309}
310
311/*
312 * Wakeup processes waiting on a socket buffer.

--- 143 unchanged lines hidden (view full) ---

456sbappend(sb, m)
457 struct sockbuf *sb;
458 struct mbuf *m;
459{
460 register struct mbuf *n;
461
462 if (m == 0)
463 return;
300 return (error);
301 }
302 sb->sb_flags |= SB_LOCK;
303 return (0);
304}
305
306/*
307 * Wakeup processes waiting on a socket buffer.

--- 143 unchanged lines hidden (view full) ---

451sbappend(sb, m)
452 struct sockbuf *sb;
453 struct mbuf *m;
454{
455 register struct mbuf *n;
456
457 if (m == 0)
458 return;
464 if (n = sb->sb_mb) {
459 n = sb->sb_mb;
460 if (n) {
465 while (n->m_nextpkt)
466 n = n->m_nextpkt;
467 do {
468 if (n->m_flags & M_EOR) {
469 sbappendrecord(sb, m); /* XXXXXX!!!! */
470 return;
471 }
472 } while (n->m_next && (n = n->m_next));

--- 33 unchanged lines hidden (view full) ---

506sbappendrecord(sb, m0)
507 register struct sockbuf *sb;
508 register struct mbuf *m0;
509{
510 register struct mbuf *m;
511
512 if (m0 == 0)
513 return;
461 while (n->m_nextpkt)
462 n = n->m_nextpkt;
463 do {
464 if (n->m_flags & M_EOR) {
465 sbappendrecord(sb, m); /* XXXXXX!!!! */
466 return;
467 }
468 } while (n->m_next && (n = n->m_next));

--- 33 unchanged lines hidden (view full) ---

502sbappendrecord(sb, m0)
503 register struct sockbuf *sb;
504 register struct mbuf *m0;
505{
506 register struct mbuf *m;
507
508 if (m0 == 0)
509 return;
514 if (m = sb->sb_mb)
510 m = sb->sb_mb;
511 if (m)
515 while (m->m_nextpkt)
516 m = m->m_nextpkt;
517 /*
518 * Put the first mbuf on the queue.
519 * Note this permits zero length records.
520 */
521 sballoc(sb, m0);
522 if (m)

--- 19 unchanged lines hidden (view full) ---

542 register struct sockbuf *sb;
543 register struct mbuf *m0;
544{
545 register struct mbuf *m;
546 register struct mbuf **mp;
547
548 if (m0 == 0)
549 return;
512 while (m->m_nextpkt)
513 m = m->m_nextpkt;
514 /*
515 * Put the first mbuf on the queue.
516 * Note this permits zero length records.
517 */
518 sballoc(sb, m0);
519 if (m)

--- 19 unchanged lines hidden (view full) ---

539 register struct sockbuf *sb;
540 register struct mbuf *m0;
541{
542 register struct mbuf *m;
543 register struct mbuf **mp;
544
545 if (m0 == 0)
546 return;
550 for (mp = &sb->sb_mb; m = *mp; mp = &((*mp)->m_nextpkt)) {
547 for (mp = &sb->sb_mb; *mp ; mp = &((*mp)->m_nextpkt)) {
548 m = *mp;
551 again:
552 switch (m->m_type) {
553
554 case MT_OOBDATA:
555 continue; /* WANT next train */
556
557 case MT_CONTROL:
549 again:
550 switch (m->m_type) {
551
552 case MT_OOBDATA:
553 continue; /* WANT next train */
554
555 case MT_CONTROL:
558 if (m = m->m_next)
556 m = m->m_next;
557 if (m)
559 goto again; /* inspect THIS train further */
560 }
561 break;
562 }
563 /*
564 * Put the first mbuf on the queue.
565 * Note this permits zero length records.
566 */

--- 44 unchanged lines hidden (view full) ---

611 bcopy((caddr_t)asa, mtod(m, caddr_t), asa->sa_len);
612 if (n)
613 n->m_next = m0; /* concatenate data to control */
614 else
615 control = m0;
616 m->m_next = control;
617 for (n = m; n; n = n->m_next)
618 sballoc(sb, n);
558 goto again; /* inspect THIS train further */
559 }
560 break;
561 }
562 /*
563 * Put the first mbuf on the queue.
564 * Note this permits zero length records.
565 */

--- 44 unchanged lines hidden (view full) ---

610 bcopy((caddr_t)asa, mtod(m, caddr_t), asa->sa_len);
611 if (n)
612 n->m_next = m0; /* concatenate data to control */
613 else
614 control = m0;
615 m->m_next = control;
616 for (n = m; n; n = n->m_next)
617 sballoc(sb, n);
619 if (n = sb->sb_mb) {
618 n = sb->sb_mb;
619 if (n) {
620 while (n->m_nextpkt)
621 n = n->m_nextpkt;
622 n->m_nextpkt = m;
623 } else
624 sb->sb_mb = m;
625 return (1);
626}
627

--- 15 unchanged lines hidden (view full) ---

643 n = m; /* save pointer to last control buffer */
644 for (m = m0; m; m = m->m_next)
645 space += m->m_len;
646 if (space > sbspace(sb))
647 return (0);
648 n->m_next = m0; /* concatenate data to control */
649 for (m = control; m; m = m->m_next)
650 sballoc(sb, m);
620 while (n->m_nextpkt)
621 n = n->m_nextpkt;
622 n->m_nextpkt = m;
623 } else
624 sb->sb_mb = m;
625 return (1);
626}
627

--- 15 unchanged lines hidden (view full) ---

643 n = m; /* save pointer to last control buffer */
644 for (m = m0; m; m = m->m_next)
645 space += m->m_len;
646 if (space > sbspace(sb))
647 return (0);
648 n->m_next = m0; /* concatenate data to control */
649 for (m = control; m; m = m->m_next)
650 sballoc(sb, m);
651 if (n = sb->sb_mb) {
651 n = sb->sb_mb;
652 if (n) {
652 while (n->m_nextpkt)
653 n = n->m_nextpkt;
654 n->m_nextpkt = control;
655 } else
656 sb->sb_mb = control;
657 return (1);
658}
659

--- 118 unchanged lines hidden (view full) ---

778 register struct mbuf *m, *mn;
779
780 m = sb->sb_mb;
781 if (m) {
782 sb->sb_mb = m->m_nextpkt;
783 do {
784 sbfree(sb, m);
785 MFREE(m, mn);
653 while (n->m_nextpkt)
654 n = n->m_nextpkt;
655 n->m_nextpkt = control;
656 } else
657 sb->sb_mb = control;
658 return (1);
659}
660

--- 118 unchanged lines hidden (view full) ---

779 register struct mbuf *m, *mn;
780
781 m = sb->sb_mb;
782 if (m) {
783 sb->sb_mb = m->m_nextpkt;
784 do {
785 sbfree(sb, m);
786 MFREE(m, mn);
786 } while (m = mn);
787 m = mn;
788 } while (m);
787 }
788}
789 }
790}