MCPcopy Create free account
hub / github.com/Singular/Singular / omDoCheckBinAddr

Function omDoCheckBinAddr

omalloc/omDebugCheck.c:198–251  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

196}
197
198omError_t omDoCheckBinAddr(void* addr, void* bin_size, omTrackFlags_t flags, char level,
199 omError_t report, OM_FLR_DECL)
200{
201 omBinPage page = omGetBinPageOfAddr(addr);
202 omBinPageRegion region = page->region;
203 omBin bin = omGetBinOfPage(page);
204
205 omAssume(omIsBinPageAddr(addr));
206 omAssume(! omCheckPtr(addr, 0, OM_FLR));
207
208 omAddrCheckReturnCorrupted(! omIsKnownTopBin(bin, ! omIsBinAddrTrackAddr(addr)));
209
210 if (flags & OM_FBINADDR && flags & OM_FSIZE)
211 omAddrCheckReturnError(bin->sizeW*SIZEOF_LONG != (size_t) bin_size, omError_WrongSize);
212
213 if (level > 1)
214 {
215 omAddrCheckReturnError(omIsAddrOnFreeBinPage(addr), omError_FreedAddr);
216 omAddrCheckReturnError(omFindRegionOfAddr(addr) != region, omError_FreedAddrOrMemoryCorrupted);
217 omAddrCheckReturnError(!omIsOnGList(bin->last_page, prev, page), omError_FreedAddrOrMemoryCorrupted);
218
219 if (flags & OM_FUSED)
220 {
221 omAddrCheckReturnError(omIsOnList(page->current, addr), omError_FreedAddr);
222 omAddrCheckReturnError((level > 1) && omIsInKeptAddrList(addr), omError_FreedAddr);
223 }
224 }
225 else
226 {
227 omAddrCheckReturnError(omCheckPtr(region, omError_MaxError, OM_FLR_VAL), omError_FreedAddrOrMemoryCorrupted);
228 }
229
230
231 /* Check that addr is aligned within page of bin */
232 omAddrCheckReturnError((bin->max_blocks >= 1) &&
233 ( ( ( (unsigned long) addr)
234 - ((unsigned long) page)
235 - SIZEOF_OM_BIN_PAGE_HEADER)
236 % (bin->sizeW * SIZEOF_VOIDP)
237 != 0), omError_FalseAddr);
238
239 /* Check that specified bin or size is correct */
240 omAddrCheckReturnError((flags & OM_FBIN) && bin_size != NULL
241 && ((omBin) bin_size) != omGetTopBinOfAddr(addr), omError_WrongBin);
242
243 if ((flags & OM_FSIZE) && (!(flags & OM_FSLOPPY) || (size_t) bin_size > 0))
244 {
245 size_t size = (size_t) bin_size;
246 omAssume(!omIsBinAddrTrackAddr(addr));
247 omAddrCheckReturnError((bin->sizeW << LOG_SIZEOF_LONG) < OM_ALIGN_SIZE(size), omError_WrongSize);
248 }
249
250 return omError_NoError;
251}
252
253omError_t omDoCheckBin(omBin bin, int normal_bin, char level,
254 omError_t report, OM_FLR_DECL)

Callers 2

omCheckTrackAddrFunction · 0.85
omDoCheckAddrFunction · 0.85

Calls 6

omGetBinOfPageFunction · 0.85
omCheckPtrFunction · 0.85
omIsKnownTopBinFunction · 0.85
omIsAddrOnFreeBinPageFunction · 0.85
omFindRegionOfAddrFunction · 0.85
omIsInKeptAddrListFunction · 0.85

Tested by

no test coverage detected