#19 nsd/tclcache.c:879: error: Null Dereference pointer `cPtr` last assigned on line 829 could be null and is dereferenced at line 879, column 22. nsd/tclcache.c:826:1: start of procedure NsTclCacheKeysObjCmd() 824. 825. 826. int ^ 827. NsTclCacheKeysObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const* objv) 828. { nsd/tclcache.c:829:5: 827. NsTclCacheKeysObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const* objv) 828. { 829. TclCache *cPtr = NULL; ^ 830. const Ns_Entry *entry; 831. char *pattern = NULL; nsd/tclcache.c:831:5: 829. TclCache *cPtr = NULL; 830. const Ns_Entry *entry; 831. char *pattern = NULL; ^ 832. int exact = (int)NS_FALSE, result = TCL_OK; 833. const NsInterp *itPtr = clientData; nsd/tclcache.c:832:5: 830. const Ns_Entry *entry; 831. char *pattern = NULL; 832. int exact = (int)NS_FALSE, result = TCL_OK; ^ 833. const NsInterp *itPtr = clientData; 834. const Ns_CacheTransactionStack *transactionStackPtr = &itPtr->cacheTransactionStack; nsd/tclcache.c:833:5: 831. char *pattern = NULL; 832. int exact = (int)NS_FALSE, result = TCL_OK; 833. const NsInterp *itPtr = clientData; ^ 834. const Ns_CacheTransactionStack *transactionStackPtr = &itPtr->cacheTransactionStack; 835. nsd/tclcache.c:834:5: 832. int exact = (int)NS_FALSE, result = TCL_OK; 833. const NsInterp *itPtr = clientData; 834. const Ns_CacheTransactionStack *transactionStackPtr = &itPtr->cacheTransactionStack; ^ 835. 836. Ns_ObjvSpec opts[] = { nsd/tclcache.c:836:5: 834. const Ns_CacheTransactionStack *transactionStackPtr = &itPtr->cacheTransactionStack; 835. 836. Ns_ObjvSpec opts[] = { ^ 837. {"-exact", Ns_ObjvBool, &exact, INT2PTR(NS_TRUE)}, 838. {"--", Ns_ObjvBreak, NULL, NULL}, nsd/tclcache.c:841:5: 839. {NULL, NULL, NULL, NULL} 840. }; 841. Ns_ObjvSpec args[] = { ^ 842. {"cache", ObjvCache, &cPtr, clientData}, 843. {"?pattern", Ns_ObjvString, &pattern, NULL}, nsd/tclcache.c:846:5: 844. {NULL, NULL, NULL, NULL} 845. }; 846. args[0].arg = clientData; /* pass non-constant clientData for "cache" */ ^ 847. 848. if (Ns_ParseObjv(opts, args, interp, 1, objc, objv) != NS_OK) { nsd/tclcache.c:848:9: Taking false branch 846. args[0].arg = clientData; /* pass non-constant clientData for "cache" */ 847. 848. if (Ns_ParseObjv(opts, args, interp, 1, objc, objv) != NS_OK) { ^ 849. result = TCL_ERROR; 850. nsd/tclcache.c:851:16: Taking false branch 849. result = TCL_ERROR; 850. 851. } else if (pattern != NULL && (exact != 0 || noGlobChars(pattern))) { ^ 852. Tcl_Obj *listObj = Tcl_NewListObj(0, NULL); 853. nsd/tclcache.c:871:9: Skipping Tcl_NewListObj(): method has no implementation 869. } else { 870. Ns_CacheSearch search; 871. Tcl_Obj *listObj = Tcl_NewListObj(0, NULL); ^ 872. 873. /* nsd/tclcache.c:878:9: 876. * take a while for large caches. 877. */ 878. assert(cPtr != NULL); ^ 879. Ns_CacheLock(cPtr->cache); 880. entry = Ns_CacheFirstEntryT(cPtr->cache, &search, transactionStackPtr); nsd/tclcache.c:879:9: 877. */ 878. assert(cPtr != NULL); 879. Ns_CacheLock(cPtr->cache); ^ 880. entry = Ns_CacheFirstEntryT(cPtr->cache, &search, transactionStackPtr); 881. while (entry != NULL) {