summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2003-03-25 19:00:35 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2003-03-25 19:00:35 +0000
commit26cdc2aff41927292e2b68201c345d6ff75d3721 (patch)
tree2cfed0f83211ba2d7c0042b8841383c7e181fcff /cpukit
parent2003-03-25 Thomas Doerfler <Thomas.Doerfler@imd-systems.de> (diff)
downloadrtems-26cdc2aff41927292e2b68201c345d6ff75d3721.tar.bz2
2002-03-25 Eric Norum <norume@aps.anl.gov>
PR 374/networking * Makefile.am, rtems/rtems_bsdnet.h, rtems/rtems_glue.c: The patch sent as part of PR270 got applied to the wrong place. The effect was that (1) startup was no faster than before and (2) malloc starvation messages came way too quickly. The attached patch fixes both these problems and also provides a mechanism for applications to handle malloc starvation conditions as they see fit. * rtems/rtems_bsdnet_malloc_starvation.c: New file.
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/libnetworking/ChangeLog12
-rw-r--r--cpukit/libnetworking/Makefile.am3
-rw-r--r--cpukit/libnetworking/rtems/rtems_bsdnet.h7
-rw-r--r--cpukit/libnetworking/rtems/rtems_bsdnet_malloc_starvation.c15
-rw-r--r--cpukit/libnetworking/rtems/rtems_glue.c8
5 files changed, 40 insertions, 5 deletions
diff --git a/cpukit/libnetworking/ChangeLog b/cpukit/libnetworking/ChangeLog
index 79bae776c3..8415ce70a1 100644
--- a/cpukit/libnetworking/ChangeLog
+++ b/cpukit/libnetworking/ChangeLog
@@ -1,3 +1,15 @@
+2002-03-25 Eric Norum <norume@aps.anl.gov>
+
+
+ PR 374/networking
+ * Makefile.am, rtems/rtems_bsdnet.h, rtems/rtems_glue.c:
+ The patch sent as part of PR270 got applied to the wrong place.
+ The effect was that (1) startup was no faster than before and
+ (2) malloc starvation messages came way too quickly. The attached
+ patch fixes both these problems and also provides a mechanism for
+ applications to handle malloc starvation conditions as they see fit.
+ * rtems/rtems_bsdnet_malloc_starvation.c: New file.
+
2003-03-18 Till Straumann <strauman@slac.stanford.edu>
PR 356/bsps
diff --git a/cpukit/libnetworking/Makefile.am b/cpukit/libnetworking/Makefile.am
index 793e0c1759..1fb550e079 100644
--- a/cpukit/libnetworking/Makefile.am
+++ b/cpukit/libnetworking/Makefile.am
@@ -159,7 +159,8 @@ PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems \
rtems_C_FILES = rtems/sghostname.c rtems/issetugid.c rtems/rtems_glue.c rtems/rtems_syscall.c \
rtems/rtems_bootp.c rtems/rtems_showmbuf.c rtems/rtems_showroute.c rtems/rtems_showifstat.c \
rtems/rtems_showipstat.c rtems/rtems_showicmpstat.c rtems/rtems_showtcpstat.c \
- rtems/rtems_showudpstat.c rtems/rtems_select.c rtems/mkrootfs.c
+ rtems/rtems_showudpstat.c rtems/rtems_select.c rtems/mkrootfs.c \
+ rtems/rtems_bsdnet_malloc_starvation.c
OBJS += $(rtems_C_FILES:rtems/%.c=$(ARCH)/%.$(OBJEXT))
$(ARCH)/%.$(OBJEXT): rtems/%.c
diff --git a/cpukit/libnetworking/rtems/rtems_bsdnet.h b/cpukit/libnetworking/rtems/rtems_bsdnet.h
index e9c8f3965a..72464ddec7 100644
--- a/cpukit/libnetworking/rtems/rtems_bsdnet.h
+++ b/cpukit/libnetworking/rtems/rtems_bsdnet.h
@@ -182,4 +182,11 @@ void rtems_bsdnet_do_bootp_and_rootfs (void);
int rtems_bsdnet_synchronize_ntp (int interval, rtems_task_priority priority);
+/*
+ * Callback to report BSD malloc starvation.
+ * The default implementation just prints a message but an application
+ * can provide its own version.
+ */
+void rtems_bsdnet_malloc_starvation(void);
+
#endif /* _RTEMS_BSDNET_ */
diff --git a/cpukit/libnetworking/rtems/rtems_bsdnet_malloc_starvation.c b/cpukit/libnetworking/rtems/rtems_bsdnet_malloc_starvation.c
new file mode 100644
index 0000000000..20af7a97b8
--- /dev/null
+++ b/cpukit/libnetworking/rtems/rtems_bsdnet_malloc_starvation.c
@@ -0,0 +1,15 @@
+/*
+ * Routine called when malloc() is not succeeding. This can be overridden
+ * by a BSP.
+ *
+ * $Id*
+ */
+
+#include <stdio.h>
+#include <rtems_bsdnet.h>
+
+void
+rtems_bsdnet_malloc_starvation(void)
+{
+ printf ("rtems_bsdnet_malloc still waiting.\n");
+}
diff --git a/cpukit/libnetworking/rtems/rtems_glue.c b/cpukit/libnetworking/rtems/rtems_glue.c
index 4ed1455cff..d1aad32023 100644
--- a/cpukit/libnetworking/rtems/rtems_glue.c
+++ b/cpukit/libnetworking/rtems/rtems_glue.c
@@ -117,11 +117,10 @@ rtems_bsdnet_malloc (unsigned long size, int type, int flags)
return p;
rtems_bsdnet_semaphore_release ();
if (++try >= 30) {
- printf ("rtems_bsdnet_malloc still waiting.\n");
+ rtems_bsdnet_malloc_starvation();
try = 0;
}
- while (rtems_bsdnet_seconds_since_boot() == 0)
- rtems_task_wake_after(1);
+ rtems_task_wake_after (rtems_bsdnet_ticks_per_second);
rtems_bsdnet_semaphore_obtain ();
}
}
@@ -272,7 +271,8 @@ rtems_bsdnet_initialize (void)
/*
* Ensure that `seconds' is greater than 0
*/
- rtems_task_wake_after (rtems_bsdnet_ticks_per_second);
+ while (rtems_bsdnet_seconds_since_boot() == 0)
+ rtems_task_wake_after(1);
/*
* Set up BSD-style sockets