OLD | NEW |
1 /* This Source Code Form is subject to the terms of the Mozilla Public | 1 /* This Source Code Form is subject to the terms of the Mozilla Public |
2 * License, v. 2.0. If a copy of the MPL was not distributed with this | 2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
4 | 4 |
5 #ifdef DEBUG | 5 #ifdef DEBUG |
6 static const char CVS_ID[] = "@(#) $RCSfile: arena.c,v $ $Revision: 1.15 $ $Date
: 2012/07/06 18:19:32 $"; | 6 static const char CVS_ID[] = "@(#) $RCSfile: arena.c,v $ $Revision: 1.15 $ $Date
: 2012/07/06 18:19:32 $"; |
7 #endif /* DEBUG */ | 7 #endif /* DEBUG */ |
8 | 8 |
9 /* | 9 /* |
10 * arena.c | 10 * arena.c |
(...skipping 16 matching lines...) Expand all Loading... |
27 | 27 |
28 /* | 28 /* |
29 * NSSArena | 29 * NSSArena |
30 * | 30 * |
31 * This is based on NSPR's arena code, but it is threadsafe. | 31 * This is based on NSPR's arena code, but it is threadsafe. |
32 * | 32 * |
33 * The public methods relating to this type are: | 33 * The public methods relating to this type are: |
34 * | 34 * |
35 * NSSArena_Create -- constructor | 35 * NSSArena_Create -- constructor |
36 * NSSArena_Destroy | 36 * NSSArena_Destroy |
| 37 * NSS_ZAlloc |
| 38 * NSS_ZRealloc |
| 39 * NSS_ZFreeIf |
37 * | 40 * |
38 * The nonpublic methods relating to this type are: | 41 * The nonpublic methods relating to this type are: |
39 * | 42 * |
40 * nssArena_Create -- constructor | 43 * nssArena_Create -- constructor |
41 * nssArena_Destroy | 44 * nssArena_Destroy |
42 * nssArena_Mark | 45 * nssArena_Mark |
43 * nssArena_Release | 46 * nssArena_Release |
44 * nssArena_Unmark | 47 * nssArena_Unmark |
45 * | 48 * |
46 * nss_ZAlloc | 49 * nss_ZAlloc |
(...skipping 763 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
810 */ | 813 */ |
811 h = (struct pointer_header *)p; | 814 h = (struct pointer_header *)p; |
812 h->arena = arena; | 815 h->arena = arena; |
813 h->size = size; | 816 h->size = size; |
814 rv = (void *)((char *)h + sizeof(struct pointer_header)); | 817 rv = (void *)((char *)h + sizeof(struct pointer_header)); |
815 (void)nsslibc_memset(rv, 0, size); | 818 (void)nsslibc_memset(rv, 0, size); |
816 return rv; | 819 return rv; |
817 } | 820 } |
818 | 821 |
819 /* | 822 /* |
| 823 * NSS_ZAlloc |
| 824 * |
| 825 * This routine allocates and zeroes a section of memory of the |
| 826 * size, and returns to the caller a pointer to that memory. If |
| 827 * the optional arena argument is non-null, the memory will be |
| 828 * obtained from that arena; otherwise, the memory will be obtained |
| 829 * from the heap. This routine may return NULL upon error, in |
| 830 * which case it will have set an error upon the error stack. The |
| 831 * value specified for size may be zero; in which case a valid |
| 832 * zero-length block of memory will be allocated. This block may |
| 833 * be expanded by calling NSS_ZRealloc. |
| 834 * |
| 835 * The error may be one of the following values: |
| 836 * NSS_ERROR_INVALID_ARENA |
| 837 * NSS_ERROR_NO_MEMORY |
| 838 * NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD |
| 839 * |
| 840 * Return value: |
| 841 * NULL upon error |
| 842 * A pointer to the new segment of zeroed memory |
| 843 */ |
| 844 |
| 845 NSS_IMPLEMENT void * |
| 846 NSS_ZAlloc |
| 847 ( |
| 848 NSSArena *arenaOpt, |
| 849 PRUint32 size |
| 850 ) |
| 851 { |
| 852 return nss_ZAlloc(arenaOpt, size); |
| 853 } |
| 854 |
| 855 /* |
820 * nss_ZAlloc | 856 * nss_ZAlloc |
821 * | 857 * |
822 * This routine allocates and zeroes a section of memory of the | 858 * This routine allocates and zeroes a section of memory of the |
823 * size, and returns to the caller a pointer to that memory. If | 859 * size, and returns to the caller a pointer to that memory. If |
824 * the optional arena argument is non-null, the memory will be | 860 * the optional arena argument is non-null, the memory will be |
825 * obtained from that arena; otherwise, the memory will be obtained | 861 * obtained from that arena; otherwise, the memory will be obtained |
826 * from the heap. This routine may return NULL upon error, in | 862 * from the heap. This routine may return NULL upon error, in |
827 * which case it will have set an error upon the error stack. The | 863 * which case it will have set an error upon the error stack. The |
828 * value specified for size may be zero; in which case a valid | 864 * value specified for size may be zero; in which case a valid |
829 * zero-length block of memory will be allocated. This block may | 865 * zero-length block of memory will be allocated. This block may |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
896 | 932 |
897 rv = nss_zalloc_arena_locked(arenaOpt, size); | 933 rv = nss_zalloc_arena_locked(arenaOpt, size); |
898 | 934 |
899 PR_Unlock(arenaOpt->lock); | 935 PR_Unlock(arenaOpt->lock); |
900 return rv; | 936 return rv; |
901 } | 937 } |
902 /*NOTREACHED*/ | 938 /*NOTREACHED*/ |
903 } | 939 } |
904 | 940 |
905 /* | 941 /* |
| 942 * NSS_ZFreeIf |
| 943 * |
| 944 * If the specified pointer is non-null, then the region of memory |
| 945 * to which it points -- which must have been allocated with |
| 946 * NSS_ZAlloc -- will be zeroed and released. This routine |
| 947 * returns a PRStatus value; if successful, it will return PR_SUCCESS. |
| 948 * If unsuccessful, it will set an error on the error stack and return |
| 949 * PR_FAILURE. |
| 950 * |
| 951 * The error may be one of the following values: |
| 952 * NSS_ERROR_INVALID_POINTER |
| 953 * |
| 954 * Return value: |
| 955 * PR_SUCCESS |
| 956 * PR_FAILURE |
| 957 */ |
| 958 NSS_IMPLEMENT PRStatus |
| 959 NSS_ZFreeIf |
| 960 ( |
| 961 void *pointer |
| 962 ) |
| 963 { |
| 964 return nss_ZFreeIf(pointer); |
| 965 } |
| 966 |
| 967 /* |
906 * nss_ZFreeIf | 968 * nss_ZFreeIf |
907 * | 969 * |
908 * If the specified pointer is non-null, then the region of memory | 970 * If the specified pointer is non-null, then the region of memory |
909 * to which it points -- which must have been allocated with | 971 * to which it points -- which must have been allocated with |
910 * nss_ZAlloc -- will be zeroed and released. This routine | 972 * nss_ZAlloc -- will be zeroed and released. This routine |
911 * returns a PRStatus value; if successful, it will return PR_SUCCESS. | 973 * returns a PRStatus value; if successful, it will return PR_SUCCESS. |
912 * If unsuccessful, it will set an error on the error stack and return | 974 * If unsuccessful, it will set an error on the error stack and return |
913 * PR_FAILURE. | 975 * PR_FAILURE. |
914 * | 976 * |
915 * The error may be one of the following values: | 977 * The error may be one of the following values: |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
961 | 1023 |
962 /* No way to "free" it within an NSPR arena. */ | 1024 /* No way to "free" it within an NSPR arena. */ |
963 | 1025 |
964 PR_Unlock(h->arena->lock); | 1026 PR_Unlock(h->arena->lock); |
965 return PR_SUCCESS; | 1027 return PR_SUCCESS; |
966 } | 1028 } |
967 /*NOTREACHED*/ | 1029 /*NOTREACHED*/ |
968 } | 1030 } |
969 | 1031 |
970 /* | 1032 /* |
| 1033 * NSS_ZRealloc |
| 1034 * |
| 1035 * This routine reallocates a block of memory obtained by calling |
| 1036 * nss_ZAlloc or nss_ZRealloc. The portion of memory |
| 1037 * between the new and old sizes -- which is either being newly |
| 1038 * obtained or released -- is in either case zeroed. This routine |
| 1039 * may return NULL upon failure, in which case it will have placed |
| 1040 * an error on the error stack. |
| 1041 * |
| 1042 * The error may be one of the following values: |
| 1043 * NSS_ERROR_INVALID_POINTER |
| 1044 * NSS_ERROR_NO_MEMORY |
| 1045 * NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD |
| 1046 * |
| 1047 * Return value: |
| 1048 * NULL upon error |
| 1049 * A pointer to the replacement segment of memory |
| 1050 */ |
| 1051 |
| 1052 NSS_EXTERN void * |
| 1053 NSS_ZRealloc |
| 1054 ( |
| 1055 void *pointer, |
| 1056 PRUint32 newSize |
| 1057 ) |
| 1058 { |
| 1059 return nss_ZRealloc(pointer, newSize); |
| 1060 } |
| 1061 |
| 1062 /* |
971 * nss_ZRealloc | 1063 * nss_ZRealloc |
972 * | 1064 * |
973 * This routine reallocates a block of memory obtained by calling | 1065 * This routine reallocates a block of memory obtained by calling |
974 * nss_ZAlloc or nss_ZRealloc. The portion of memory | 1066 * nss_ZAlloc or nss_ZRealloc. The portion of memory |
975 * between the new and old sizes -- which is either being newly | 1067 * between the new and old sizes -- which is either being newly |
976 * obtained or released -- is in either case zeroed. This routine | 1068 * obtained or released -- is in either case zeroed. This routine |
977 * may return NULL upon failure, in which case it will have placed | 1069 * may return NULL upon failure, in which case it will have placed |
978 * an error on the error stack. | 1070 * an error on the error stack. |
979 * | 1071 * |
980 * The error may be one of the following values: | 1072 * The error may be one of the following values: |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1117 | 1209 |
1118 PRStatus | 1210 PRStatus |
1119 nssArena_Shutdown(void) | 1211 nssArena_Shutdown(void) |
1120 { | 1212 { |
1121 PRStatus rv = PR_SUCCESS; | 1213 PRStatus rv = PR_SUCCESS; |
1122 #ifdef DEBUG | 1214 #ifdef DEBUG |
1123 rv = nssPointerTracker_finalize(&arena_pointer_tracker); | 1215 rv = nssPointerTracker_finalize(&arena_pointer_tracker); |
1124 #endif | 1216 #endif |
1125 return rv; | 1217 return rv; |
1126 } | 1218 } |
OLD | NEW |