// File: /workspace/github_c_makefile_star2_O1/icebert[P]pblat/lib/udc.c
// Function: udcFileClose
void udcFileClose(struct udcFile **pFile)
/* Close down cached file. */
{
struct udcFile *file = *pFile;
if (file != NULL)
    {
    if (udcLogStream)
        {
        fprintf(udcLogStream, "Close %s %s %lld %lld bit %lld %lld %lld %lld %lld sparse %lld %lld %lld %lld %lld udc  %lld %lld %lld %lld %lld net %lld %lld %lld %lld %lld \n",
           file->url, file->prot->type, file->ios.numConnects, file->ios.numReuse,
           file->ios.bit.numSeeks, file->ios.bit.numReads, file->ios.bit.bytesRead, file->ios.bit.numWrites,  file->ios.bit.bytesWritten, 
           file->ios.sparse.numSeeks, file->ios.sparse.numReads, file->ios.sparse.bytesRead, file->ios.sparse.numWrites,  file->ios.sparse.bytesWritten, 
           file->ios.udc.numSeeks, file->ios.udc.numReads, file->ios.udc.bytesRead, file->ios.udc.numWrites,  file->ios.udc.bytesWritten, 
           file->ios.net.numSeeks, file->ios.net.numReads, file->ios.net.bytesRead, file->ios.net.numWrites,  file->ios.net.bytesWritten);
        }
    if (file->mmapBase != NULL)
        {
        if (munmap(file->mmapBase, file->size) < 0)
            errnoAbort("munmap() failed on %s", file->url);
        }
    if (file->connInfo.socket != 0)
	mustCloseFd(&(file->connInfo.socket));
    if (file->connInfo.ctrlSocket != 0)
	mustCloseFd(&(file->connInfo.ctrlSocket));
    freeMem(file->url);
    freeMem(file->protocol);
    udcProtocolFree(&file->prot);
    freeMem(file->cacheDir);
    freeMem(file->bitmapFileName);
    freeMem(file->sparseFileName);
    freeMem(file->sparseReadAheadBuf);
    if (file->fdSparse != 0)
        mustCloseFd(&(file->fdSparse));
    udcBitmapClose(&file->bits);
    }
freez(pFile);
}

// Assembly:
pushq %r14
pushq %rbx
subq $0xa8, %rsp
movq %rdi, %rbx
movq (%rdi), %r14
testq %r14, %r14
je 0x40e16
movq 0x8354e(%rip), %rdi     # 0xc41f8
testq %rdi, %rdi
je 0x40d64
movq 0x8(%r14), %rdx
movq 0x18(%r14), %rax
movq 0x18(%rax), %rcx
movq 0x158(%r14), %r8
movq 0x160(%r14), %r9
movups 0xb8(%r14), %xmm0
movups 0xc8(%r14), %xmm1
movups 0xd8(%r14), %xmm2
movups 0xe8(%r14), %xmm3
movups 0xf8(%r14), %xmm4
movups 0x108(%r14), %xmm5
movups 0x118(%r14), %xmm6
movups 0x128(%r14), %xmm7
movups 0x138(%r14), %xmm8
movups 0x148(%r14), %xmm9
movups %xmm9, 0x90(%rsp)
movups %xmm8, 0x80(%rsp)
movups %xmm7, 0x70(%rsp)
movups %xmm6, 0x60(%rsp)
movups %xmm5, 0x50(%rsp)
movups %xmm4, 0x40(%rsp)
movups %xmm3, 0x30(%rsp)
movups %xmm2, 0x20(%rsp)
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
leaq 0x53ffe(%rip), %rsi     # 0x94d5b
xorl %eax, %eax
callq 0x6a90
movq 0xb0(%r14), %rdi
testq %rdi, %rdi
je 0x40d8f
movq 0x28(%r14), %rsi
callq 0x63d0
testl %eax, %eax
jns 0x40d8f
movq 0x8(%r14), %rsi
leaq 0x54063(%rip), %rdi     # 0x94deb
xorl %eax, %eax
callq 0x26c9f
cmpl $0x0, 0x90(%r14)
je 0x40da5
leaq 0x90(%r14), %rdi
callq 0x232a1
cmpl $0x0, 0xa0(%r14)
je 0x40dbb
leaq 0xa0(%r14), %rdi
callq 0x232a1
movq 0x8(%r14), %rdi
callq 0x2dd41
movq 0x10(%r14), %rdi
callq 0x2dd41
leaq 0x18(%r14), %rdi
callq 0x2dd51
movq 0x38(%r14), %rdi
callq 0x2dd41
movq 0x40(%r14), %rdi
callq 0x2dd41
movq 0x48(%r14), %rdi
callq 0x2dd41
movq 0x60(%r14), %rdi
callq 0x2dd41
cmpl $0x0, 0x58(%r14)
je 0x40e0a
leaq 0x58(%r14), %rdi
callq 0x232a1
addq $0x70, %r14
movq %r14, %rdi
callq 0x40e28
movq %rbx, %rdi
addq $0xa8, %rsp
popq %rbx
popq %r14
jmp 0x2dd51