source: rtems/c/src/exec/posix/src/mqueue.c @ 4a2b4f0

4.104.114.84.95
Last change on this file since 4a2b4f0 was 3c465878, checked in by Joel Sherrill <joel.sherrill@…>, on 07/01/02 at 22:33:47

2002-07-01 Joel Sherrill <joel@…>

  • Mega patch merge to change the format of the object IDs to loosen the dependency between the SCORE and the various APIs. There was considerable work to simplify the object name management and it appears that the name_table field is no longer needed. This patch also includes the addition of the internal mutex which is currently only used to protect some types of allocation and deallocation. This significantly can reduce context switch latency under certain circumstances. In particular, some heap/region operations were O(n) and had dispatching disabled. This should help enormously. With this merge, the patch is not as clean as it should be. In particular, the documentation has not been modified to reflect the new object ID layout, the IDs in the test screens are not updated, and _Objects_Get_information needs to be a real routine not inlined. As part of this patch a lot of MP code for thread/proxy blocking was made conditional and cleaned up.
  • include/rtems/posix/key.h, src/cond.c, src/condinit.c, src/intr.c, src/key.c, src/keycreate.c, src/keydelete.c, src/killinfo.c, src/mqueue.c, src/mqueuecreatesupp.c, src/mutex.c, src/mutexinit.c, src/psignal.c, src/pthread.c, src/semaphore.c, src/semaphorecreatesupp.c: Modified as part of above.
  • Property mode set to 100644
File size: 2.7 KB
Line 
1/*
2 *  NOTE:  The structure of the routines is identical to that of POSIX
3 *         Message_queues to leave the option of having unnamed message
4 *         queues at a future date.  They are currently not part of the
5 *         POSIX standard but unnamed message_queues are.  This is also
6 *         the reason for the apparently unnecessary tracking of
7 *         the process_shared attribute.  [In addition to the fact that
8 *         it would be trivial to add pshared to the mq_attr structure
9 *         and have process private message queues.]
10 *
11 *         This code ignores the O_RDONLY/O_WRONLY/O_RDWR flag at open
12 *         time.
13 *
14 *  $Id$
15 */
16
17#if HAVE_CONFIG_H
18#include "config.h"
19#endif
20
21#include <stdarg.h>
22
23#include <pthread.h>
24#include <limits.h>
25#include <errno.h>
26#include <fcntl.h>
27#include <mqueue.h>
28
29#include <rtems/system.h>
30#include <rtems/score/watchdog.h>
31#include <rtems/seterr.h>
32#include <rtems/posix/mqueue.h>
33#include <rtems/posix/time.h>
34
35/*PAGE
36 *
37 *  _POSIX_Message_queue_Manager_initialization
38 *
39 *  This routine initializes all message_queue manager related data structures.
40 *
41 *  Input parameters:
42 *    maximum_message_queues - maximum configured message_queues
43 *
44 *  Output parameters:  NONE
45 */
46 
47void _POSIX_Message_queue_Manager_initialization(
48  unsigned32 maximum_message_queues
49)
50{
51  _Objects_Initialize_information(
52    &_POSIX_Message_queue_Information, /* object information table */
53    OBJECTS_POSIX_API,                 /* object API */
54    OBJECTS_POSIX_MESSAGE_QUEUES,      /* object class */
55    maximum_message_queues,            /* maximum objects of this class */
56    sizeof( POSIX_Message_queue_Control ),
57                                /* size of this object's control block */
58    FALSE,                      /* TRUE if names for this object are strings */
59    _POSIX_PATH_MAX             /* maximum length of each object's name */
60#if defined(RTEMS_MULTIPROCESSING)
61    ,
62    FALSE,                      /* TRUE if this is a global object class */
63    NULL                        /* Proxy extraction support callout */
64#endif
65  );
66  _Objects_Initialize_information(
67    &_POSIX_Message_queue_Information_fds,
68    OBJECTS_POSIX_API,
69    OBJECTS_POSIX_MESSAGE_QUEUE_FDS,
70    maximum_message_queues,
71    sizeof( POSIX_Message_queue_Control_fd ),
72                                /* size of this object's control block */
73    FALSE,                      /* TRUE if names for this object are strings */
74    0                           /* maximum length of each object's name */
75#if defined(RTEMS_MULTIPROCESSING)
76    ,
77    FALSE,                      /* TRUE if this is a global object class */
78    NULL                        /* Proxy extraction support callout */
79#endif
80  );
81}
Note: See TracBrowser for help on using the repository browser.